我在 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/