我试图在c中创建一个字符串数组,如果我使用以下代码:
char (*a[2])[14];
a[0]="blah";
a[1]="hmm";
GCC给我“警告:来自不兼容的指针类型的赋值”。正确的做法是什么?
编辑:我很好奇为什么这应该给编译器警告,因为如果我做printf([1]);,它正确地打印“嗯”。
我试图在c中创建一个字符串数组,如果我使用以下代码:
char (*a[2])[14];
a[0]="blah";
a[1]="hmm";
GCC给我“警告:来自不兼容的指针类型的赋值”。正确的做法是什么?
编辑:我很好奇为什么这应该给编译器警告,因为如果我做printf([1]);,它正确地打印“嗯”。
当前回答
如果你不想跟踪数组中字符串的数量,并且想要遍历它们,只需在最后添加NULL字符串:
char *strings[]={ "one", "two", "three", NULL };
int i=0;
while(strings[i]) {
printf("%s\n", strings[i]);
//do something
i++;
};
其他回答
每个元素都是指向其第一个字符的指针
const char *a[2] = {"blah", "hmm"};
如果您不想更改字符串,那么您可以简单地这样做
const char *a[2];
a[0] = "blah";
a[1] = "hmm";
当你这样做的时候,你会分配一个包含两个指针的数组给const char。这些指针将被设置为静态字符串“blah”和“hmm”的地址。
如果你确实希望能够改变实际的字符串内容,你必须做一些像这样的事情
char a[2][14];
strcpy(a[0], "blah");
strcpy(a[1], "hmm");
这将分配两个连续的数组,每个数组14个字符,然后静态字符串的内容将被复制到其中。
您的代码正在创建一个函数指针数组。试一试
char* a[size];
or
char a[size1][size2];
代替。
参见wikibooks关于数组和指针的内容
在ANSI C中:
char* strings[3];
strings[0] = "foo";
strings[1] = "bar";
strings[2] = "baz";
一个好方法是自己定义一个字符串。
#include <stdio.h>
typedef char string[]
int main() {
string test = "string";
return 0;
}
就是这么简单。