使用`reverseStr()`在C w / o中反转一个字符串

时间:2015-08-31 13:43:57

标签: c arrays c99

我试图反转一个字符串(char数组),但收到此错误:

  

错误:'对于'循环初始声明仅允许在C99模式下

有人可以帮帮我,告诉我我的代码有什么问题吗?

#include <stdio.h>
#include <stdlib.h>

int main()
{
   char myString[] = "My name is Blalalalala";
   char reversedString[] = "";

   int count = 0;
   for(int i = sizeof(myString) - 1; i >= 0; i--){
       reversedString[count++] += myString;
   }
   for(int i = 0; i < sizeof(reversedString); i++){
       printf("%c", reversedString[i]);
   }

   return 0;
}

1 个答案:

答案 0 :(得分:2)

关于此处警告的问题(如果我们可以将其称为问题)是

  for(int i = .......

您在i循环条件中声明(并定义)for变量。它只允许一次又一次C99标准。在此之前,所有变量声明都应该在块的开头完成。

您可以强制编译器在编译时使用C99启用--std=c99

以防万一,您没有C99支持,您必须将i的定义移到for循环条件语句之外。

那就是说,让我们看一下代码中的实际问题。

  1. char reversedString[] = "";仅定义一个大小为1的数组。之后,它们不会自动展开,因此您当前的代码访问超出范围的内存以生成undefined behaviour

  2. myString是一个数组,数组名称代表数组的基地址,因此可能要写

      reversedString[count++] += myString;