我试图在c中创建一个字符串数组,如果我使用以下代码:

char (*a[2])[14];
a[0]="blah";
a[1]="hmm";

GCC给我“警告:来自不兼容的指针类型的赋值”。正确的做法是什么?

编辑:我很好奇为什么这应该给编译器警告,因为如果我做printf([1]);,它正确地打印“嗯”。


当前回答

您的代码正在创建一个函数指针数组。试一试

char* a[size];

or

char a[size1][size2];

代替。

参见wikibooks关于数组和指针的内容

其他回答

如果您不想更改字符串,那么您可以简单地这样做

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";

你好,你可以试试这个:

 char arr[nb_of_string][max_string_length]; 
 strcpy(arr[0], "word");

这是一个很好的例子,在c语言中使用字符串数组

#include <stdio.h>
#include <string.h>


int main(int argc, char *argv[]){

int i, j, k;

// to set you array
//const arr[nb_of_string][max_string_length]
char array[3][100];

char temp[100];
char word[100];

for (i = 0; i < 3; i++){
    printf("type word %d : ",i+1);
    scanf("%s", word);
    strcpy(array[i], word);
}

for (k=0; k<3-1; k++){
    for (i=0; i<3-1; i++)
    {
        for (j=0; j<strlen(array[i]); j++)
        {
            // if a letter ascii code is bigger we swap values
            if (array[i][j] > array[i+1][j])
            {
                strcpy(temp, array[i+1]);
                strcpy(array[i+1], array[i]);
                strcpy(array[i], temp);

                j = 999;
            }

            // if a letter ascii code is smaller we stop
            if (array[i][j] < array[i+1][j])
            {
                    j = 999;
            }

        }
    }
}

for (i=0; i<3; i++)
{
    printf("%s\n",array[i]);
}

return 0;
}

一个好方法是自己定义一个字符串。

#include <stdio.h>
typedef char string[]
int main() {
    string test = "string";
    return 0;
}

就是这么简单。