当前位置: 技术问答>linux和unix
fprintf(或printf)输出为什么得到几个变量结果的值乱串,怪!
来源: 互联网 发布时间:2015-12-30
本文导语: 下面代码编译无问题,但运行结果古怪,比如说输入为: name 张三丰 moblile 133888666 homephone 01088899 home address 北京海淀区 结果显示为:6,,?,北淀区 (我的系统是FC6_X86_64) #include #include #include int main() { char *my_q...
下面代码编译无问题,但运行结果古怪,比如说输入为:
name
张三丰
moblile
133888666
homephone
01088899
home address
北京海淀区
结果显示为:6,,?,北淀区
(我的系统是FC6_X86_64)
#include
#include
#include
int main() {
char *my_query, *tmp_name, *tmp_moblile, *tmp_homephone, *tmp_home;
printf(" *****************************n Please input QUERY statement !n ******************************n");
printf("namen");
scanf("%s", &tmp_name);
printf("moblilen");
scanf("%s", &tmp_moblile);
printf("homephonen");
scanf("%s",&tmp_homephone);
printf("home addressn");
scanf("%s", &tmp_home);
fprintf(stderr,"%s,%s,%s,%sn",&tmp_name,&tmp_moblile,&tmp_homephone,&tmp_home);
}
|
你的程序有错误
char *my_query, *tmp_name, *tmp_moblile, *tmp_homephone, *tmp_home;
scanf("%s", &tmp_name);等其他三处
----------------------------------------------------
程序运行时指针
my_query, tmp_name, tmp_moblile, tmp_homephone, tmp_home
所指向的地方是随机的.
比如说my_query, tmp_name, tmp_moblile, tmp_homephone, tmp_home刚好是相邻的
你就肯定的不到正确的结果了
就算你把scanf("%s", &tmp_name);改为正确形式scanf("%s", tmp_name);
也得不到你想要的结果
========================================
正确的应该是这样的程序
#include
#include
#include
void main() {
char tmp_name[7], tmp_moblile[11], tmp_homephone[8], tmp_home[64];
printf(" *****************************n Please input QUERY statement !n ******************************n");
printf("namen");
scanf("%s", tmp_name);
printf("moblilen");
scanf("%s", tmp_moblile);
printf("homephonen");
scanf("%s",tmp_homephone);
printf("home addressn");
scanf("%s", tmp_home);
fprintf(stderr,"%s,%s,%s,%sn",tmp_name,tmp_moblile,tmp_homephone,tmp_home);
}
不过还要注意输入的长度不要定义的最大长度.
char *my_query, *tmp_name, *tmp_moblile, *tmp_homephone, *tmp_home;
scanf("%s", &tmp_name);等其他三处
----------------------------------------------------
程序运行时指针
my_query, tmp_name, tmp_moblile, tmp_homephone, tmp_home
所指向的地方是随机的.
比如说my_query, tmp_name, tmp_moblile, tmp_homephone, tmp_home刚好是相邻的
你就肯定的不到正确的结果了
就算你把scanf("%s", &tmp_name);改为正确形式scanf("%s", tmp_name);
也得不到你想要的结果
========================================
正确的应该是这样的程序
#include
#include
#include
void main() {
char tmp_name[7], tmp_moblile[11], tmp_homephone[8], tmp_home[64];
printf(" *****************************n Please input QUERY statement !n ******************************n");
printf("namen");
scanf("%s", tmp_name);
printf("moblilen");
scanf("%s", tmp_moblile);
printf("homephonen");
scanf("%s",tmp_homephone);
printf("home addressn");
scanf("%s", tmp_home);
fprintf(stderr,"%s,%s,%s,%sn",tmp_name,tmp_moblile,tmp_homephone,tmp_home);
}
不过还要注意输入的长度不要定义的最大长度.
|
这是典型的野指针问题(建议你看看这方面的问题).
即是:一个指针在没有指向确实的地址前,不能够通过scanf()对它进行赋值.
即是:一个指针在没有指向确实的地址前,不能够通过scanf()对它进行赋值.
|
char *my_query, *tmp_name, *tmp_moblile, *tmp_homephone, *tmp_home;
-->
char my_query[100],.....
数组没分配空间
-->
char my_query[100],.....
数组没分配空间