gpt4 book ai didi

C:可以反转字符数组,但不能反转字符串

转载 作者:行者123 更新时间:2023-12-02 15:17:38 25 4
gpt4 key购买 nike

我在 C 中编写了一个简单的程序来反转字符串。这是我的代码:

  #include <stdio.h>

int main(){
char istring[] = {'f','o','o','b','a','r'};

char revstring[sizeof(istring)];

for(int i = 0; i < sizeof(istring); i++){
int cplace = sizeof(istring)-i-1;
revstring[cplace] = istring[i];
}
printf("%s",revstring);
return 0;
}

我的结果和预期的一样 raboof

现在,如果我交换 char istring[] = {'f','o','o','b','a','r'};,与 char istring[] = "foobar";,我没有得到任何输出。怎么了?

提前致谢。

(对不起,如果这是一个新手问题)

最佳答案

sizeof "foobar"7,而不是 6。 C 字符串以 '\0' 字符结束。

您的第一个示例之所以有效,是因为您未能以 NUL 终止您的字符串,因此 'r''f' 交换了。您可能很幸运,因为反向字符串后的地址空间 求值 为零(等于 '\0'),终止字符串。否则,打印未终止的字符串会调用未定义的行为。

使用 "foobar" 时,'f''\0' 将被交换,并且您的结果 C 字符串将有效地零长度。

使用 strlen 解决这个问题获取字符串的长度,而不是 sizeof 获取内存块的长度。您需要包含 string.h header 。

char str[] = "foobar";
size_t str_len = strlen(str);

char rev[str_len + 1];
rev[str_len] = '\0';

for (int i = 0; i < str_len; i++)
rev[i] = str[str_len - i - 1];

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

关于C:可以反转字符数组,但不能反转字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39313182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com