这听起来可能有点愚蠢,但这就是我得到它的方式,我用谷歌搜索了它,但没有找到相关的解决方案。
I always thought that in C, strings was terminated by '\0'
是单个字符。 (因此我们使用单引号)
此外,我们还可以做一些类似的事情,
while ( a[i]!='\0' )
do blah blah
which suggests that '\0'
是单个字符,理想情况下应存储在单个位置。
但是当我这样声明一个数组时:
char a[3];
当我尝试在其中添加一些值时,请说“嗨”。
然后
printing a[0] gives "h"
printing a[1] gives empty space
printing a[2] gives 0
这表明\存储在位置 1,'0' 存储在位置 2。尽管我们将其用作单个字符,但整个 '\0' 并没有存储在一起。
为什么会这样?任何人都可以澄清一下吗?
谢谢!
编辑:
#include <stdio.h>
void main()
{
int i=0;
char a[2];
fgets(a,sizeof(a),stdin); // Here I input "Hi".
while(a[i]!='\0')
{
printf("%c",a[i]);
fflush(stdin);
i=i+1;
}
}
最佳答案
fgets
将缓冲区的大小作为第二个参数并读取 减一 个字符,然后将最后一个字符设为 \0
.因为您的数组大小为 2(顺便说一下,这对于字符串 hi
来说太小了),fgets
读取一个字符并将最后一个字符设为 \0
,所以你有一个包含 h\0
的数组。
为了让它工作,让你的数组大小为 3;一个用于 h
,一个用于 i
,一个用于 \0
:
#include <stdio.h>
void main() {
int i = 0;
char a[3];
fgets(a, sizeof(a), stdin); // Here I input "Hi".
while(a[i] != '\0') {
printf("%c",a[i]);
fflush(stdin);
i=i+1;
}
}
关于c - C中的字符串终止-存储和匹配之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8792800/