c - C中的字符串终止-存储和匹配之间的区别

标签 c string

这听起来可能有点愚蠢,但这就是我得到它的方式,我用谷歌搜索了它,但没有找到相关的解决方案。

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/

相关文章:

结构错误格式的 C 编程指针

c# - 需要一些帮助来破译正则表达式

jquery - 如何使用jquery将所有双引号替换为单引号?

javascript拆分数组中的字符串

java - 如何处理最终字符串?

python - 如何使用正则表达式和精确文字匹配的混合来获取索引值

python - 如何对 2D 依赖表进行排序/排序

c - 全局变量未保持设置状态,可能是由 fork() 引起的

c - 为什么这个 C 初始化将数组地址设置为零?

iphone - 如何在iPhone应用程序中通过修改图像的像素值来为UIImage添加色调效果