c 中 char* 何时以 null 结尾?

问题描述

我对 char* null-termination 感到困惑,所以我决定对我能找到的案例进行研究。这些字符串文字是否以 null 结尾?

  1. char str1[512]="This is a random string"
  2. char *str2 = strtok(buffer,"\n,") 我找到了答案。 This ends with null.
  3. fgets(stdin,str3,512)
  4. scanf("%s",str4)
  5. 代码片段:
    char str[5];    
    for(int i=0; i<5; i++) scanf("%c",&str[i]);
    

注意 1:我假设 c 库中的所有标准函数返回 char*,null 终止字符串。
注意 2: 如何检查字符串是否以空字符结尾? (我尝试了 this 方法,但它会打印随机的东西。)

编辑只要向我展示一种确定字符串文字是否以空字符结尾的方法就足够了。我将逐一介绍每个案例,并在此处为未来的读者更新。

解决方法

这样的例子绝不是详尽无遗的,但它带来了一些清晰度。答案其实很简单。任何以 '\0' 结尾的字符数组都称为字符串。程序员独立决定他需要什么。

#include<stdio.h>

int main(void)
{
char w[]="mamamia";
int i;
for(i=0;i<sizeof(w);i++)
{
if(w[i]=='\0')
    printf("w[%d]==null\n",i);
else
    printf("w[%d]== %c \n",i,w[i]);
}
    return 0;
}