反向字符串程序中的空字符是什么?

What is with the null character in reverse string program?

我必须编写一个简单的程序来反转字符串。我最终根据自己的理解得到了这段代码,但也得到了 google 的帮助,因为我最初无法让它工作。它运行良好并按预期输出,我理解除了 reverse[j] = '[=11=]' 语句之外的所有内容。 当我没有说明时,我一直在输出中获取符号,但我想知道这是如何工作的。谁能解释一下?

#include<stdio.h>

int main(void)
{
    char original[20], reverse[20];
    int length, i, j;

    printf("Enter a string:\n");
    gets(original); 

    length = strlen(original);

    for (i = length - 1, j= 0; i >= 0; i--, j++)
        reverse[j] = original[i];

    reverse[j] = '[=10=]';  //I don't know what this statement does exactly

    printf("The string reversed is:\n %s\n", reverse);

    return 0;
}

在 C 中,字符串的末尾总是有一个 [=10=]。阅读 why and how.

[=11=] 不是真正的字符。这是 程序标记字符串结尾的方式。因此,如果您只想反转字符串,则不必在反转字符串的开头移动此字符。

original string: hello[=10=]
reverse string : olleh[=10=]

如果您希望字符数组包含一个字符串,那么它必须有终止零。

例如,您程序中使用的函数 strlen 计算字符数组中终止零之前的字符数。

还有函数 printf 与格式说明符 %s 一起使用,输出字符数组中的字符,直到遇到终止零。

例如,如果您有这样的数组

char s[10] = "Hello";

然后调用 strlen( s ) returns 5 而不是 10。然后调用 printf( "%s\n", s );输出 6 个字符(包括换行符)。

考虑这个示范程序

#include <stdio.h>

int main(void) 
{
    char s[10] = "Hello";

    printf( "%d\n", printf( "%s\n", s ) );

    return 0;
}

它的输出是

Hello
6

本次初始化

char s[10] = "Hello";

完全等同于

char s[10] = { 'H', 'e', 'l', 'l', 'o', '[=14=]', '[=14=]', '[=14=]', '[=14=]', '[=14=]'};

如果你需要反转存储在数组中的字符串,很明显你需要反转第一个终止零之前的字符。如果您想以相反的顺序将字符串复制到另一个字符数组,您需要在目标数组中附加终止零。

这个循环

for (i = length - 1, j= 0; i >= 0; i--, j++)
    reverse[j] = original[i];

从原始字符数组中以终止零之前的最后一个字符开始,以相反的顺序复制除终止零之外的所有字符到目标字符数组。您需要使用终止零

附加目标字符数组
reverse[j] = '[=16=]';

\0 用于空终止字符串。这将标记字符串的结尾。如果不是空终止,后续位置的数据也将被错误地视为字符串的一部分。