This is in reference to a solution posted on: Looping a fixed size array without defining its size in C
Here's my sample code:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
static const char *foo[] = {
"this is a test",
"hello world",
"goodbye world",
"123",
NULL
};
for (char *it = foo[0]; it != NULL; it++) {
printf ("str %s\n", it);
}
return 0;
}
Trying to compile this gives:
gcc -o vararray vararray.c
vararray.c: In function ‘main’:
vararray.c:14: warning: initialization discards qualifiers from pointer target type
vararray.c:14: error: ‘for’ loop initial declaration used outside C99 mode
Besides the initialization in the for loop, you're incrementing in the wrong place. I think this is what you mean (note that I'm not exactly a C guru):
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
static const char *foo[] = {
"this is a test",
"hello world",
"goodbye world",
"123",
NULL
};
const char **it;
for (it=foo; *it != NULL; it++) {
printf ("str %s\n", *it);
}
return 0;
}
Your loop variable it
is of type char*
, the contents of the array are of type const char*
. If you change it
to be also a const char*
the warning should go away.
You declare it
inside the for statement, this is not allowed in C before C99. Declare it
at the beginning of main()
instead.
Alternatively you can add -std=c99
or -std=gnu99
to your gcc flags to enable the C99 language features.
Use -std=c99
option when compiling your code in order to use the C99
features.
Change it
to const char*
type ( to remove the warnings)
在C99之前,在for循环中声明字符指针是非标准的。
您需要做两件事才能在没有警告的情况下进行编译:声明iterator const char* it
,并在函数的开始而不是在loop语句中进行操作。
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.