2
我有一個程序,我正在寫其中我需要從平面文件中fgets一行。我然後sscanf行將數據放入一個結構。這給了我非常意想不到的結果。首先,這是一個與我想要做的相似的工作示例。我有一個文件department.in它看起來像下面這樣:fgets和sscanf與一個結構導致意外的結果
0 something
1 else
2 more
這裏是一個運行,並給了我,結果我期望一個示例程序:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *in;
in = fopen("department.in", "r");
char * buffer = malloc(256 * sizeof(char));
while((fgets(buffer, 256, in)) != NULL){
int index;
char* name;
sscanf(buffer, "%d %s", &index, name);
printf("\n\nIndex: %d, Name: %s.\n\n", index, name);
}
free(buffer);
return 0;
}
正如預期的這個結果:
Index: 0, Name: something.
Index: 1, Name: else.
Index: 2, Name: more.
然而,當我添加一個結構,它編譯罰款:
#include <stdio.h>
#include <stdlib.h>
typedef struct{
int index;
char* name;
}test;
int main(void)
{
FILE *in;
in = fopen("department.in", "r");
char * buffer = malloc(256 * sizeof(char));
while((fgets(buffer, 256, in)) != NULL){
test *mytest = malloc(sizeof(test));
sscanf(buffer, "%d %s", &mytest->index, mytest->name);
printf("\n\nIndex: %d, Name: %s.\n\n", mytest->index, mytest->name);
free(mytest);
}
free(buffer);
return 0;
}
個
的結果不是我所期望的:
Index: 0, Name: (null).
Index: 1, Name: (null).
Index: 2, Name: (null).
顯然,我做我的字符的,但我爲我的生活不能弄清楚什麼不對勁。當我改變某些東西時,它甚至會將故障排除在外。任何幫助將不勝感激!
P.S.這不是功課。我剛剛爲我的實際代碼做了一個更簡單的示例,以便於閱讀和編譯,以及學習我需要的這個概念。再次感謝!
這是第二部分的工作!當然......我知道我錯過了一些東西。你如何正確地分配存儲到mytest->名稱? – 2013-04-26 00:45:37
用示例編輯。 – 2013-04-26 00:55:29
我不敢相信我沒有看到!謝謝 :) – 2013-04-26 01:14:42