use*_*357 7 c arrays string scanf character
我是C的真正初学者,但我正在学习!
我之前偶然发现了这个问题,并决定询问原因是什么.请解释一下你的答案,这样我才能学习.
我制作了一个程序,允许你输入5个字符然后显示你写的字符并还原它们,例如:"asdfg" - "gfdsa".奇怪的是,在输入的原始字符之后显示了一个奇怪的字符.
这是代码:
char str[5];
char outcome[] = "OOOOO";
int i;
int u;
printf("Enter five characters\n");
scanf("%s", str);
for(i = 4, u = 0; i >=0; u++, i--){
outcome[i] = str[u];
}
printf("\nYou wrote: %s. The outcome is: %s.", str , outcome);
return 0;
Run Code Online (Sandbox Code Playgroud)
如果我输入:"asdfg"它显示:"asdfg♣",为什么?
谢谢你的时间,请解释你的答案:)
Mik*_*ike 18
因为没有空终止符.在C中,"字符串"是一系列连续字节(字符),以一个称为空终止符('\0')的标记字符结束.您的代码从用户那里获取输入并填充所有5个字符,因此您的字符串没有"结束".然后当你打印字符串时,它将打印你的5个字符("asdfg"),它将继续打印堆栈上的任何垃圾,直到它达到空终止符.
char str[6] = {'\0'}; //5 + 1 for '\0', initialize it to an empty string
...
printf("Enter five characters\n");
scanf("%5s", str); // limit the input to 5 characters
Run Code Online (Sandbox Code Playgroud)
关于限制格式特定的好处是,即使输入超过5个字符,只有5个将存储到您的字符串中,总是为该空终止符留出空间.
小智 2
你的绳子str[5];太短了。
它应该是
str[6];
Run Code Online (Sandbox Code Playgroud)
当您打印它时,代码超出了该数组的范围。
您还必须为 str[] 数组设置一个空终止字符来标记数组的结尾。
str[5] = '\0'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27189 次 |
| 最近记录: |