c - 字符串末尾的空字符 '\0'

标签 c string null c-strings null-terminated

我有以下代码。

#include <stdio.h>
#include <string.h>

#define MAXLINE 1000

int main()
{
    int i;
    char s[MAXLINE];

    for (i = 0; i < 20; ++i) {
        s[i] = i + 'A';
        printf("%c", s[i]);
    }

    printf("\nstrlen = %d\n", strlen(s)); // strlen(s): 20
    return 0;
}

我应该写吗
s[i] = '\0';

在循环执行后显式标记字符串的结尾还是自动完成?没有 s[i] = '\0'; 函数 strlen(s) 返回正确的值 20。

最佳答案

是的,您需要自己添加一个空终止符。一个不是自动添加的。

您可以通过将 s 显式初始化为在字节 20 处不包含 NUL 的内容来验证这一点。

char s[MAXLINE] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";

如果你这样做 strlen(s) 不会返回 20。

关于c - 字符串末尾的空字符 '\0',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59553322/

相关文章:

c - C99:fscanf()设置eof早于fgetc()的标准做法吗?

在映射文件上调用 VirtualProtect

java - 使用 null int 的 Gson 反序列化似乎无法正常工作

C++ 什么是 NULL 指针值?

使用 C unix 命令或 C 更改文件中的特定单词

c - 如何获取 PID_MAX 宏?

c# - 如何从十六进制字符串中获取位范围并将其转换为整数?

php - 正则表达式匹配必须包含字符串中的所有字符

java - 字符和字符串之间的比较没有像我期望的那样工作。我究竟做错了什么?

Kotlin:编码讨论:检查多个可能为空的变量的优雅方法