c中的char*什么时候以null结尾?

When does a char* ends with null in c?

我对 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库中的所有标准函数returns一个char*,null终止字符串。
注释 2:如何检查字符串是否以 null 结尾? (我尝试了 this 方法,但它会打印出随机的东西。)

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

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

#include<stdio.h>

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