繁体   English   中英

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

[英]What is with the null character in reverse string program?

我不得不做一个简单的程序来反转一个字符串。 我最终得到了这个代码来自我自己的理解,但也得到谷歌的帮助,因为我原来无法让它工作。 它运行正常并按原样输出,除了reverse[j] = '\\0'语句之外,我理解所有这些。 当我没有陈述时,我一直在输出中得到符号,但我想知道它是如何工作的。 有人可以解释一下吗?

#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] = '\0';  //I don't know what this statement does exactly

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

    return 0;
}

如果你想要一个字符数组包含一个字符串,那么它必须具有终止零。

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

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

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

char s[10] = "Hello";

然后调用strlen( s )返回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', '\0', '\0', '\0', '\0', '\0'};

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

这个循环

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

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

reverse[j] = '\0';

在C中,字符串的末尾始终为\\0 阅读原因方法

\\0不是真正的角色。 这是程序标记字符串结尾的方式。 因此,如果您只想反转一个字符串,则不必在反向字符串的开头移动该字符。

original string: hello\0
reverse string : olleh\0

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM