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