我需要循环const char
,我使用了一个简单的字符串循环示例:
const char *str;
for(int i = 0; i < 10; ++i)
{
str += " ";
}
但是当我尝试编译时,我得到了这个:
ubuntu @ eeepc:〜/ Test_C_OS $ gcc -o kernel.o -c kernel.c -Wall -Wextra -nostdlib -nostartfiles -nodefaultlibs
kernel.c:26:错误:'for'循环初始声明在C99模式之外使用
kernel.c:28:错误:无效操作数到二进制+
ubuntu的@的EeePC:〜/ Test_C_OS $
我该怎么办?
答案 0 :(得分:5)
您的第一个错误是因为您已完成:
for (int i = 0; ...
而不是:
int i;
for (i = 0; ...)
(或者,您可以单独留下该位并将-std=gnu99
添加到您的gcc选项中。)
你的第二个错误是因为行:
str += " ";
尝试添加两个指针值。这在C中没有任何定义的语义 - 它没有任何意义。你甚至不清楚尝试在这里做什么 - 也许你想从一个空字符串开始,然后将10个字符串" "
附加到它上面?如果是这样,那么您需要将其更改为:
char str[100]; /* Allocate space for a 99 character string, plus terminator */
int i;
str[0] = '\0'; /* Start with empty string */
for (i = 0; i < 10; i++)
{
strcat(str, " ");
}
在这种特殊情况下,因为你总是循环10次而根本不需要循环 - 你可以使用10个空格的字符串:
char str[100];
strcpy(str, " "); /* 10 spaces */
(str[0] = '\0';
是不必要的,因为我们现在使用的是strcpy
,而不是strcat
。)
答案 1 :(得分:4)
C89不支持在for
表达式的第一部分声明循环计数器。 C99可以,但是大多数编译器都需要明确的选项(gcc的-std=c99
)来启用它。做:
int i;
for ( i = 0; i < 10 ; ++i ) ...
另外,不要在字符指针中添加字符:)
答案 2 :(得分:2)
这里有两个问题
1)C89标准不允许声明在循环内
for(int i = 0; i < 10; ++i)
应该是:
int i
for(i = 0; i < 10; ++i)
2)您正在尝试添加两个指针值:
str += " ";
这里应该做什么取决于你正在尝试用字符串str。
答案 3 :(得分:1)
您展示的代码没有任何意义。你可能会尝试做几件事:
我的第一个猜测是你正在尝试制作包含10个空格的字符串。要做到这一点:
char str[10];
int i;
for (i = 0; i < 10; i++)
{
str[i] = ' ';
}
您可能要做的第二件事是改变您的char *指向的位置。由于您将其声明为const,这将无法正常工作,正如其他人所指出的那样。但这就是你的代码试图做的事情,因此它失败的原因。如果你实际上试图增加点指向的位置(通过空间的ASCII值的值),那么你需要使你的指针不是常数。
编辑:好抓。需要单引号。至于它不是一个字符串,因为它不是空终止,我试图尽可能地预测OP正在尝试做什么。如果它被视为一个真正的字符串,则需要空终止,但我把它留了出来,因为OP也做了。
答案 4 :(得分:0)
您的代码有几个问题。
首先,您尝试使用不指向任何内容的char
指针构建字符串。使用char
数组或使用malloc
分配内存。然后,您在for循环中声明int i
。这不会在大多数编译器上编译。在for循环中使用它之前,需要声明我。您也可以使用gcc --std=c99 test.c
使用gcc编译它。之后,您尝试使用+运算符连接字符串。请记住,C没有任何内置字符串类型,因此没有为字符串连接定义+运算符(char*
或char[]
不是字符串,与C ++中的字符串类相同Java,它们只是用作字符串)。您应该使用concat
中的string.h
功能。实际上,反复调用concat
将一个char
添加到字符串的末尾并不是一个好主意,但这是另一个故事,当我们到达那里时,让我们跨过那座桥:)。
在任何好的C书中阅读关于指针和字符串的章节可能是个好主意。这些东西的工作方式与你想象的不同。
答案 5 :(得分:0)
如果你想循环/迭代你的const char * str,请执行以下操作:
const char *str;
for (int i = 0; i < sizeof(str); i++)
{
doSomethingWith(str[i]);
}