C 字符串数组

C 字符串数组,c,string,C,String,这可能是一个简单的问题,但我想创建二维数组并像java中的字符串一样添加它 string str = "text" ; string [][] array = new [][] string ; array[i][j] = str ; 但在C语言中并没有字符串。我像这样尝试过,但这里strcpy()给出了错误。它返回到汇编代码。我正在尝试从文本中逐行读取,并按空格分隔行,然后将它们添加到结构中。但首先我认为我必须在数组中添加每一行和每一行,然后进行迭代并添加到结构字段中 sta

这可能是一个简单的问题,但我想创建二维数组并像java中的字符串一样添加它

string  str = "text" ; 

string [][] array  = new [][] string ;  

array[i][j] = str ; 
但在C语言中并没有字符串。我像这样尝试过,但这里strcpy()给出了错误。它返回到汇编代码。我正在尝试从文本中逐行读取,并按空格分隔行,然后将它们添加到结构中。但首先我认为我必须在数组中添加每一行和每一行,然后进行迭代并添加到结构字段中

static const char filename[] = "student.txt";
FILE *file = fopen ( filename, "r" );
char line [ 128 ]; /* or other suitable maximum line size */
char delims [ ]=" ";
char *result =NULL;
char list[15];
char arra[128][128];
int i=0;
int j=0;

struct {
    char gruppa[10];
    char familiya[20];
    int uchaste;
    struct {
        int firsth;
        int second;
        int third;
        int fourht;
        int fifth;
    } exam;
}student;

for(i=0; i<128; i++)
    for(j=0; j<128; j++) 
        arra[i][j] = '\0';

for(i=0; i<15; i++)
    list[i] = '\0';


if ( file != NULL )
{           
    while ( fgets ( line, sizeof line, file ) != NULL ) 
    {
        result = strtok(line,delims);
        while (result !=NULL) {         
            strcpy(list,("%s",result));
                strcpy(arra[i][j],list); // Here it gives errror 
            j++;
            result = strtok(NULL,delims);
        }
        j=0;
        i++;
    }
    fclose ( file );        
}
else
{
    perror ( filename ); 
}
getchar();
return 0;
static const char filename[]=“student.txt”;
FILE*FILE=fopen(文件名,“r”);
字符行[128];/*或其他合适的最大线尺寸*/
char delims[]=“”;
char*result=NULL;
字符列表[15];
查阿拉[128][128];
int i=0;
int j=0;
结构{
char-gruppa[10];
char familiya[20];
内贾斯特;
结构{
int first;
int秒;
第三名;
内特福特;
int第五;
}考试;
}学生;

对于(i=0;iC中的字符串是
char
的数组,因此您的
char-arra[128][128];
指定了一个128个字符串的数组,每个字符串的长度不超过127个字符+终止的
'\0'
。如果您想要128×128个字符串,则需要第三维

如果您不介意为每个字符串分配固定数量的内存,那么您可以将第三维添加到现有定义中:
char array[128][128][max\u length\u of_string+1]

(请注意,在这种情况下,您必须确保不超过最大长度,C不会为您检查!)


如果您希望动态分配字符串,您可以使元素
char*
(即指向char的指针):
char*array[128][128]
,但是您必须为每个字符串分配
malloc
内存(不要忘记C字符串具有的尾部
'\0'
的额外
char
)。和
free
当您完成时,所有这些字符串都将被释放(除非您当时刚刚退出程序)。

C中的字符串是
char
的数组,因此您的
char arra[128][128];
指定一个由128个字符串组成的数组,每个字符串的长度最多为127个字符+终止的
“\0”
。如果需要128×128个字符串,则需要第三个维度

如果您不介意为每个字符串分配固定数量的内存,那么您可以将第三维添加到现有定义中:
char array[128][128][max\u length\u of_string+1]

(请注意,在这种情况下,您必须确保不超过最大长度,C不会为您检查!)


如果您希望动态分配字符串,您可以使元素
char*
(即指向char的指针):
char*array[128][128]
,但是您必须为每个字符串分配
malloc
内存(不要忘记C字符串具有的尾部
'\0'
的额外
char
)。和
free
完成后,将它们全部释放(除非此时您刚刚退出该程序)。

否。我希望将数组切碎,使每个记录保留字符串状数组[0][0]=str1,数组[0][1]=str2@Meko:我编辑了我的帖子,加入了另一种方式,允许你这样做。但是,如果你有
a[128][128][64]
,您可以执行strcpy(a[0][0],str);
就像您现在尝试的那样,您只需要确保字符串的长度不超过63个字符。正如我所说,C字符串是字符数组。C字符串不是数据类型。它是数据布局。字符串是“以第一个空字符结尾并包含第一个空字符的连续字符序列”。字符数组可能包含字符串。因此,严格来说,可以有一个字符数组,其中每个元素都包含一个字符串,但不能有一个字符串数组。否。我想切掉数组,使每个记录都保持类似字符串的数组[0][0]=str1,数组[0][1]=str2@Meko:我编辑了我的帖子,加入了一种允许你这样做的替代方法。但是,如果你有
a[128][128][64]
,你可以做
strcpy(a[0][0],str)
就像您现在尝试做的那样,您只需要确保字符串的长度不超过63个字符。正如我所说,C字符串是字符数组。C字符串不是数据类型。它是数据布局。字符串是“以第一个空字符结尾并包含第一个空字符的连续字符序列”"。一个字符数组可能包含一个字符串。因此,严格来说,可以有一个字符数组,其中每个元素都包含一个字符串,但不能有一个字符串数组。是否尝试了sprintf函数?这似乎有点太复杂了。直接将字符串放入结构而不是存储中会更容易在数组中设置字符串。你也可以通过在链接列表中设置结构节点使其更灵活。你尝试过sprintf函数吗?看起来你这样做有点太复杂了。直接将字符串放入结构而不是存储在数组中会更容易。你也可以使其更灵活使by在链表中创建结构节点