在下面的c代码中,当去掉ln8 & lb9时,"第10行 "没有打印任何内容。它只是接受输入并不打印任何内容。但奇怪的是,加上这2行后,代码工作得非常好,即输入的字符串被打印了两次,一次是for循环,一次是ln10中的printf语句。(我想做的只是打印输入的字符串)我使用MinGw编译器,用cmd运行代码。请在这里输入图片说明
int main()
{
char *s;
scanf("%s",s);
printf("Line 9:\t");
for(int i=0;s[i]!='\0';i++) //line 8
printf("%c",*(s+i)); //line 9
printf("\nLine 12:\t%s\n",s); //line10
return 0;
}
char *s
你声明了一个指针,但没有为它分配。这是未定义的。因为未定义的行为,一切都可能发生。(例如,当我在我的电脑上测试你的程序时,它引起了 Segmentation fault (core dumped)
你必须在scanf之前为指针分配(不要忘了释放指针)。s
当你不需要使用它的时候)。)
char *s = malloc(sizeof(char) * MAX_LEN); // MAX_LEN: you define its value.
或者你可以使用字符数组。
char s[100]; // here, the string length is up to 99;
试着用strdup初始化s。
int main()
{
char *s = strdup("");
scanf("%s",s);
printf("\nLine 12:\t%s\n",s); //line10
return 0;
}