首页 > 解决方案 > 直接使用 Printf 打印字符串(字符指针) - 奇怪的行为

问题描述

在下面的 c 代码中,删除 ln8 和 lb9 时,“第 10 行”不打印任何内容。它只接受输入并且不打印任何内容。但奇怪的是添加了这两行代码,代码工作得非常好,即输入字符串被 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;
}

标签: cstringfor-loopprintfscanf

解决方案


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;

推荐阅读