检查 C 字符串数组的末尾

标签 c arrays c-strings

我试图找到一个单词的结尾,例如 school,并在单词的结尾加上一个 s。

这是我到目前为止所拥有的:

for (int i = 0; i < 10; i++) {
    plural[i] = orig[i];

    if (plural[i] == NULL) {
        plural[i] = 's';
        plural[i + 1] = '\0';
    }
}

最佳答案

您的代码可能会使用 orig 中长度小于 10 个字符的字符串,并且 NULL 被定义为 0

但请注意,NULL 用于表示空指针,而不是字符串末尾的空字节。 NULL 可以这样定义:

#define NULL ((void*)0)

在这种情况下,您的代码将在编译时生成警告。

在字符串末尾编写 '\0' 来表示空字节被认为是很好的风格。空字符常量具有相同的值,0,类型为 int,但为了表示空字节而更加明确。

您应该测试 orig[i] 是否为非 null,而不是迭代到 10:

char orig[] = "world";
char plural[10];
int i;

for (i = 0; orig[i] != '\0'; i++) {
    plural[i] = orig[i];
}
plural[i] = 's';
plural[i + 1] = '\0';

关于检查 C 字符串数组的末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45123533/

相关文章:

创建 Makefile 一次编译 2 个文件

c++ - classList 数组不会向用户打印输出

c - 修改结构中的 char *

c++ - 为什么 `(void *)&` 会得到变量的地址?

c++ - 将数组中的元素数量传递给函数?

c - 用于简单文件的 C Unix 编程

c - int* 和 Type* 有区别吗?

c - 这个双重类型定义会导致访问冲突吗?

javascript - 如何在 JavaScript 中压缩/简化/缩小数值数组

arrays - 如何在awk中初始化数组的数组?