这是我的问题:我必须为学校制作这个程序,我花了最后一小时调试和谷歌搜索,但没有找到答案。
我的main
中有一个结构数组,我希望将该数组提供给我的函数seteverythingup
(通过引用调用),因为在此函数中,我从文件中读取的字符串被拆分up,我想将它写入结构中,但是当使用struct array 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++;
}
答案 0 :(得分:0)
编辑:因为有更多的混乱,我写了一个简短的程序,解决了你遇到麻烦的部分。
#include <cstdlib>
struct raeume {
int foo;
int bar;
};
void seteverythingup(struct raeume *arr, size_t len) {
for (size_t i = 0; i < len; ++i) {
arr[i].foo = 42;
arr[i].bar = 53;
}
}
int main() {
const size_t size = 10;
struct raeume *arr = (struct raeume*) malloc(size * sizeof(struct raeume));
seteverythingup(arr, size);
return 0;
}
所以基本上你的功能的签名有些奇怪。 Malloc返回指向内存位置的指针。所以你真的不需要指向数组的指针。只需传递函数你从malloc获得的指针,该函数就能操作该区域。
原始答案:
malloc(size * sizeof(raeume*));
这可能是代码的一部分,给你带来了困难。 sizeof
返回类型的大小。你问一个指向raeume struct的指针需要多少字节。您可能想要做的是询问结构本身的大小,并为此分配大小乘以空间。所以对malloc的正确调用将是:
malloc(size * sizeof(struct raeume));