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

标签 c arrays string char

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

相关文章:

string - 我可以在 bash/fishshell 中使用任何字符串操作命令/库吗?

javascript - 比较字符串的准确性(包括偏移量)

c - 0LL 或 0x0UL 是什么意思?

可以将地址运算符应用于非整数类型的二维数组和 C 中结构的非整数字段吗?

C99 的固定宽度整数类型

php - 如何从 sql 数据库的一列填充 php 数组?

c - 数组元素的不同表示

java - android/java 中的字符串,replace() 什么都不做

c - 从recvfrom获取缓冲区

python - 一行中没有所有 True 值的 boolean 数组