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

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

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

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


当前回答

char name[10][10]
int i,j,n;//here "n" is number of enteries
printf("\nEnter size of array = ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
    for(j=0;j<1;j++)
    {
        printf("\nEnter name = ");
        scanf("%s",&name[i]);
    }
}
//printing the data
for(i=0;i<n;i++)
{
    for(j=0;j<1;j++)
    {
        printf("%d\t|\t%s\t|\t%s",rollno[i][j],name[i],sex[i]);
    }
    printf("\n");
}

来试试这个!!

其他回答

或者你可以声明一个结构类型,它包含一个字符数组(1个字符串),它们创建一个结构数组,因此是一个多元素数组

typedef struct name
{
   char name[100]; // 100 character array
}name;

main()
{
   name yourString[10]; // 10 strings
   printf("Enter something\n:);
   scanf("%s",yourString[0].name);
   scanf("%s",yourString[1].name);
   // maybe put a for loop and a few print ststements to simplify code
   // this is just for example 
 }

与其他方法相比,这种方法的优点之一是允许你直接扫描到字符串,而不必使用strcpy;

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

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

就是这么简单。

如果字符串是静态的,你最好使用:

const char *my_array[] = {"eenie","meenie","miney"};

虽然不是基本的ANSI C的一部分,但您的环境很可能支持该语法。这些字符串是不可变的(只读),因此在许多环境中使用的开销比动态构建字符串数组要少。

例如,在小型微控制器项目中,这种语法使用程序内存,而不是(通常)更宝贵的ram内存。AVR-C是一个支持这种语法的示例环境,但大多数其他环境也是如此。

字符串字面量是const char *。

你用圆括号也很奇怪。你的意思可能是

const char *a[2] = {"blah", "hmm"};

它声明了一个包含两个指向常量字符的指针的数组,并将它们初始化为指向两个硬编码的字符串常量。

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

char* a[size];

or

char a[size1][size2];

代替。

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