循环使用Const Char

时间:2010-01-20 20:34:49

标签: c loops char const constants

我需要循环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 $

我该怎么办?

6 个答案:

答案 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]);
}