【问题标题】:When does a char* ends with null in c?c中的char *何时以null结尾?
【发布时间】:2021-09-25 23:42:34
【问题描述】:

我对 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. 代码 sn-p:
    char str[5];    
    for(int i=0; i<5; i++) scanf("%c",&str[i]);
    

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

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

【问题讨论】:

  • c 中的字符串何时以 null 结尾? 总是。如果它不以 '\0' 字符结尾,则它不是 C 中的“字符串”
  • @GSerg,谢谢!我经历了它并没有回答我的问题,尽管它确实消除了我的一些疑问。还有@Andrew,谢谢,我会将我的问题编辑为char*
  • 字符串不被空终止的唯一方法是程序员错误地未能终止它。这与正确终止的字符串无法区分,因为您迟早会达到空值(尽管在“稍后”的情况下,您可能会在此之前发生访问冲突错误)。真的没有办法回答“不”,而且编译器也没有好办法知道你什么时候故意这样做(将两个字符串粘合在一起,或者操纵不需要因外部原因终止的固定宽度结构)以及何时出错。
  • 在逐字符输入的情况下,需要程序员独立设置'\0'。但是假设 scanf ( ) 函数,如果使用 %s 说明符,会自动设置 '\0 '。

标签: c string null-terminated


【解决方案1】:

这样的例子绝不是详尽无遗的,但它带来了一些清晰。答案其实很简单。任何以 '\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;
}

【讨论】:

    猜你喜欢
    • 2014-05-09
    • 1970-01-01
    • 2016-10-23
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 2019-10-28
    • 1970-01-01
    • 2013-10-25
    相关资源
    最近更新 更多