我试图扫描用户输入的字符串,然后在下一行中打印它,但是由于我是编码新手,所以我无法弄清楚为什么它没有显示输出!下面是代码-
main()
{
char* w1,w2,w3,e1,e2,e3;
printf("List of Words");
printf("\tMeanings");
scanf("%s",&w1);
printf("\n%s",w1);
getch();
}
我希望w1打印在“单词列表”下,但未显示任何输出。
答案 0 :(得分:2)
这里
char* w1; /* uninitialized pointer */
scanf("%s",&w1); /* for w1 no memory is allocated. Also & is not required since w1 tends to points to some address */
w
是字符指针,指针需要指向某个有效的内存位置,但是在您的情况下,w1
没有任何有效的内存。
首先为w
分配内存,然后使用w
将输入数据放入scanf()
。对于例如
#define BUF_MAX_LENGTH 10
char *w1 = malloc(BUF_MAX_LENGTH);
if(w1 == NULL) {
/* @TODO error handling */
}
然后将数据扫描到w1
中。对于例如
scanf("%s", w1);
使用w
完成使用后,不要忘记释放动态分配的内存以避免内存泄漏。对于例如
free(w1);
旁注,请避免在同一声明中声明字符变量和字符指针变量,以提高代码的可读性。对于例如
char* w1,w2,w3,e1,e2,e3; /* mixed up */
可以
char* w1 = NULL; /* All pointer declaration */
char w2,w3,e1,e2,e3; /* All normal char variable */