【发布时间】:2016-09-29 12:17:36
【问题描述】:
这是我的问题:我必须为学校制作这个程序,我花了最后一个小时进行调试和谷歌搜索,但没有找到答案。
我的main 中有一个结构数组,我想将该数组提供给我的函数seteverythingup(通过引用调用),因为在这个函数中,我从文件中读取的字符串被拆分,并且我想把它写到结构中,但是当 strcpy 使用结构数组时,我总是得到一个SIGSEV 错误。
这是我的主要内容:
int main(int argc, char *argv[])
{
FILE* datei;
int size = 10;
int used = 0;
char line[1000];
struct raeume *arr = (raeume *) malloc(size * sizeof(raeume*));
if(arr == NULL){
return 0;
}
if(argc < 2){
return 0;
}
datei = fopen(argv[1], "rt");
if(datei == NULL){
return 0;
}
fgets(line,sizeof(line),datei);
while(fgets(line,sizeof(line),datei)){
int l = strlen(line);
if(line[l-1] == '\n'){
line[l-1] = '\0';
}
seteverythingup(&line,arr,size,&used);
}
ausgabeunsortiert(arr,size);
fclose(datei);
return 0;
}
这是我的功能:
void seteverythingup(char line[],struct raeume *arr[], int size,int used)
{
char *token,raumnummer[5],klasse[6];
int tische = 0;
const char c[2] = ";";
int i=0;
token = strtok(line, c);
strcpy(raumnummer,token);
while(token != NULL )
{
token = strtok(NULL, c);
if(i==0){
strcpy(klasse,token);
}else if(i==1){
sscanf(token,"%d",&tische);
}
i++;
}
managesize(&arr[size],&size,used);
strcpy(arr[used]->number,raumnummer);
strcpy(arr[used]->klasse,klasse);
arr[used]->tische = tische;
used++;
}
【问题讨论】:
-
技术上C没有引用调用,只有值调用。您可以使用指向变量的指针模拟引用调用。
-
至于你的问题,如果你的代码没有导致编译器给你错误或者警告,你需要开启更多的警告。
-
你分配了一个指针数组,但指针指向的地方没有空间。
-
这条线看起来有点可疑:
struct raeume *arr = (raeume *) malloc(size * sizeof(raeume*));raeume是在哪里以及如何定义的? -
那就不要加指针的间接性了。将 malloc 更改为
size * sizeof(struct raeume)并删除大部分*。将语义更改为strcpy(arr[used].number, raumnummer)
标签: c structure pass-by-reference