直接用Printf打印一个字符串(字符指针)--行为怪异

问题描述 投票:0回答:2

在下面的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;
}
c string for-loop printf scanf
2个回答
1
投票
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;

-1
投票

试着用strdup初始化s。

int main()
{
 char *s = strdup("");
 scanf("%s",s);

 printf("\nLine 12:\t%s\n",s); //line10
 return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.