首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环循环

循环循环
EN

Stack Overflow用户
提问于 2010-01-20 20:34:48
回答 6查看 4.6K关注 0票数 0

我需要循环一个const char,我使用了一个简单的string循环示例:

代码语言:javascript
复制
const char *str;
for(int i = 0; i < 10; ++i)
{
   str += " ";
}

但当我试图编译时,我得到了这样的信息:

ubuntu@eeepc:~/Test_C_OS$ gcc -o内核.o -c kernel.c -Wall -Wextra -nostdlib -nostartfiles -nodefaultlibs kernel.c:26: error:“for”循环初始声明在C99模式之外使用 kernel.c:28:错误:对二进制+无效的操作数 ubuntu@eeepc:~/Test_C_OS$

我该怎么办?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-01-20 20:48:17

您的第一个错误是因为您已经完成了:

代码语言:javascript
复制
for (int i = 0; ...

而不是:

代码语言:javascript
复制
int i;
for (i = 0; ...)

(或者,你可以撇开这一点,在gcc的选择中加入-std=gnu99 )。

第二个错误是因为行:

代码语言:javascript
复制
   str += " ";

尝试添加两个指针值。在C中没有任何定义的语义--这没有任何意义。这里您想要做的事情甚至不太清楚--也许您想从一个空字符串开始,然后将字符串" "的10个副本附加到其中?如果是这样,则需要将其更改为以下内容:

代码语言:javascript
复制
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个空格的字符串:

代码语言:javascript
复制
char str[100];

strcpy(str, "          "); /* 10 spaces */

( str[0] = '\0';是不必要的,因为我们现在使用的是strcpy,而不是strcat)。

票数 6
EN

Stack Overflow用户

发布于 2010-01-20 20:41:19

C89不支持在for表达式的第一部分中声明循环计数器。C99是这样的,但是大多数编译器都需要和显式选项(gcc的-std=c99)来打开它。做:

代码语言:javascript
复制
int i;
for ( i = 0; i < 10 ; ++i ) ...

此外,不要在字符指针中添加字符:)

票数 4
EN

Stack Overflow用户

发布于 2010-01-20 20:46:45

你这里有两个问题

1) C89标准不允许声明在循环中

代码语言:javascript
复制
for(int i = 0; i < 10; ++i)

应:

代码语言:javascript
复制
int i
for(i = 0; i < 10; ++i)

2)您正在尝试添加两个指针值:

代码语言:javascript
复制
str += " ";

这里应该做什么取决于您到底要用字符串str做什么。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2104739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档