【发布时间】:2017-07-21 08:46:56
【问题描述】:
我试图弄清楚如何用单个字符填充已知大小的字符串。然后我写了这个简单的代码来解决我遇到的一个更大的问题 (动态填充未知大小的字符串) .当我试图编译和运行这段代码时,我遇到了一个输出有一个心形符号的问题!我不知道它是从哪里来的。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
char str[3];
for(i=0;i<=2;i++){
str[i]=getc(stdin);
}
puts(str);
return 0;
}
谢谢。
【问题讨论】:
-
在 C 中
char字符串实际上被称为 null 终止 字节字符串。 “空终止”部分很重要。如果您没有将它放在字符串中,那么所有字符串函数在搜索它时都会超出范围,并且您将有 未定义的行为,这会使您的程序 格式错误 i> 并且无效。 -
@某程序员老兄_谢谢。为什么它不跳过额外的输入?我知道索引是 0,1,2 并且 index-2 是空终止的。如果我输入堆栈为什么它不跳过 ack ?
-
但是您不终止
str中的字符串,您读取了三个字符并将它们放入数组中。如果要读取三个字符,则数组需要 四个 个字符大,最后一个元素是终止符(您需要明确地对其进行初始化)。 -
@某程序员老兄_你说得对。
-
或者,也许运行时只是喜欢你:)
标签: c arrays string output codeblocks