C 循环常量字符
我需要循环一个C 循环常量字符,c,loops,char,constants,C,Loops,Char,Constants,我需要循环一个常量char,我使用了一个简单的字符串循环示例: const char *str; for(int i = 0; i < 10; ++i) { str += " "; } const char*str; 对于(int i=0;i
常量char
,我使用了一个简单的字符串循环示例:
const char *str;
for(int i = 0; i < 10; ++i)
{
str += " ";
}
const char*str;
对于(int i=0;i<10;++i)
{
str+=”;
}
但当我试图编译时,我得到了:
ubuntu@eeepc:~/Test_C_OS$gcc-o kernel.o-C kernel.C-Wall-Wextra-nostlib-notartfiles-nodefaultlibskernel.c:26:错误:“for”循环初始声明在C99模式之外使用
kernel.c:28:错误:二进制+的操作数无效
ubuntu@eeepc:~/Test\u C\u OS$ 我该怎么办?不支持在
表达式的的第一部分中声明循环计数器。是的,但大多数编译器需要一个显式选项(-std=c99
用于gcc)来打开它。做:
int i;
for ( i = 0; i < 10 ; ++i ) ...
inti;
对于(i=0;i<10;++i)。。。
另外,不要向字符指针添加字符:)这里有两个问题
1) C89标准不允许在循环中声明
for(int i = 0; i < 10; ++i)
这里应该做什么取决于您正试图对字符串str执行什么操作。您显示的代码没有任何意义。您可能会尝试做以下几件事:
我的第一个猜测是,你正在尝试创建一个有10个空格的字符串。为此:
char str[10];
int i;
for (i = 0; i < 10; i++)
{
str[i] = ' ';
}
charstr[10];
int i;
对于(i=0;i<10;i++)
{
str[i]='';
}
您可能要做的第二件事是更改char*指向的位置。因为您将其声明为const,所以正如其他人所指出的,这将不起作用。但这正是您的代码试图做的,因此它失败的原因。如果您实际上试图增加点指向的位置(通过ASCII空格值的值),则需要使指针不是常量
编辑:接得好。需要是单引号
至于它不是一个字符串,因为它不是以null结尾的,所以我试图尽可能接近地预测OP试图做什么。如果要将其视为真字符串,则需要Null终止,但我忽略了这一点,因为OP也这样做了。您的第一个错误是因为您执行了以下操作:
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, " ");
}
(没有必要使用str[0]='\0';
,因为我们现在使用的是strcpy
,而不是strcat
)。您的代码有几处错误
首先,您尝试使用不指向任何内容的char
指针构建字符串。使用char
s数组或使用malloc
分配内存。然后,在for循环中声明inti
。这在大多数编译器上无法编译。在for循环中使用i之前,需要声明i。您还可以使用gcc使用gcc--std=c99 test.c
编译它。然后,尝试使用+运算符连接字符串。记住,C没有任何内置的字符串类型,因此不定义字符串连接的+运算符(A <代码> char *<代码>或<代码> char】[/COD>不是字符串,它们与C++和java中的字符串类相同,它们只是作为字符串使用)。为此,应使用string.h
中的concat
函数。事实上,反复调用concat
在字符串末尾添加单个char
不是一个好主意,但这是另一个故事,让我们在到达时跨越这座桥:)
在任何一本好的C语言书中,通读有关指针和字符串的章节可能是一个好主意。这些事情的工作原理可能与您的想法略有不同。如果您想循环/迭代const char*str,请执行以下操作:
const char *str;
for (int i = 0; i < sizeof(str); i++)
{
doSomethingWith(str[i]);
}
const char*str;
对于(int i=0;i
你问这个问题是为了好玩还是真的想得到严肃的回答?你的个人资料看起来不需要问这样的问题。个人资料表明他是C++新手。这段代码是你新操作系统的核心吗?内森是一个奇怪的混血儿,介于奈夫和巨魔之间。他在这里提出的问题如果不太认真(或者更好)的话,可以提供几个小时的天真的娱乐。第2点是不正确的。此代码有问题,但他没有更改常量。请回顾您对指针的理解。C99允许在for循环中声明int,您可能是指第1点中的C89。是的。也解决了这个问题。谢谢。行str[i]=”代码>仍然不正确-也许你的意思是str[i]=''代码>而不是?然后,您仍然没有创建“字符串”,因为没有nul终止符(也没有空格)。他正在尝试向字符串指针添加字符串。这不会连接-它会将指向“
的指针的实际值添加到指针str
的值中。它也是有效的,因为const char*
是指向const char
的可变指针-我认为他想使用的是char const str[11]
将一个指针添加到另一个指针是无效的-指针算术定义为pointer+integer=pointer
,和pointer-pointer=integer
。Nathan Campos:我回滚了您的编辑,因为编辑的版本没有将目标作为有效字符串保留。请记住const char*array
from strings可能以NUL字符结尾,用于终止字符串“\0”
,因此,您的大小可能比可读字符的数量大1。
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, " ");
}
char str[100];
strcpy(str, " "); /* 10 spaces */
const char *str;
for (int i = 0; i < sizeof(str); i++)
{
doSomethingWith(str[i]);
}