【问题标题】:Reversing a string in C w/o using `reverseStr()`使用`reverseStr()`在C中反转字符串
【发布时间】:2015-08-31 13:43:56
【问题描述】:

我正在尝试反转一个字符串(char 的数组)但收到此错误:

错误:'for' 循环初始声明只允许在 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;
}

【问题讨论】:

  • c89 中的标头不允许数据声明。修复指定 -std=c99 或将 i 的数据类型声明移出循环以实现最大可移植性
  • 您访问的reversedString 越界,您需要支持C99 或更高版本的编译器。
  • ^ 这两件事都是真实的,需要在 OP 的代码中解决。将reversedString 变成myString 大小的缓冲区,并在循环构造之外初始化i

标签: c arrays c99


【解决方案1】:

关于这里的警告的问题(如果我们可以称之为问题)是

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

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

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

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

也就是说,让我们看看您的代码中的实际问题。

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

  2. myString是一个数组,数组名代表数组的基地址,所以可能不想想写

      reversedString[count++] += myString;
    

【讨论】:

  • 所以,基本上在 c 中我不能在 for-loop? 中声明变量? @SouravGhosh
  • @Michael Nope,您可以,但为此您的编译器应符合C99 或更高版本。
猜你喜欢
  • 2010-10-21
  • 2015-05-24
  • 2020-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多