我试图反转一个字符串(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;
}
答案 0 :(得分:2)
关于此处警告的问题(如果我们可以将其称为问题)是
for(int i = .......
您在i
循环条件中声明(并定义)for
变量。它只允许一次又一次C99
标准。在此之前,所有变量声明都应该在块的开头完成。
您可以强制编译器在编译时使用C99
启用--std=c99
。
以防万一,您没有C99
支持,您必须将i
的定义移到for
循环条件语句之外。
那就是说,让我们看一下代码中的实际问题。
char reversedString[] = "";
仅定义一个大小为1
的数组。之后,它们不会自动展开,因此您当前的代码访问超出范围的内存以生成undefined behaviour。
myString
是一个数组,数组名称代表数组的基地址,因此不可能要写
reversedString[count++] += myString;