2012-02-07 44 views
-1

這是使用C文件的簡單程序。C:我編的錯誤是什麼?

輸入要輸入文件文本的人員和ID的名稱。

但工作不正常,並很樂意幫助代碼。

我的函數malloc可以嗎?

#include <stdio.h> 
#include <stdlib.h> 

void person(); 

void main(){ 

    person(); 
} 

void person(){ 

    FILE *file; 
    char *str; 
    int i,id; 

    file=fopen("personid.txt","w"); 

    if(!file) 
    { 
     puts("Error"); 
     exit(1); 
    } 

    str=(char*)malloc(sizeof(char*)); 

    for(i=0; i<5; i++) 
    { 
     puts("Enter name:"); 
     gets(str); 
     puts("Enter you ID:"); 
     scanf("%d",&id); 
     fprintf(file,"%s - %9d\n",str,id); 
    } 

    free(str); 
    fclose(file); 

} 
+6

你能否定義「不能正常工作」?它不會編譯?它運行緩慢嗎?它是段故障嗎?它是否打印出錯誤的數據?它是否是皮膚貓?除非你告訴我們,否則我們無法知曉。 – Kitsune 2012-02-07 23:39:19

+2

你只分配足夠的空間來存儲'char'的指針,這對於名字來說是不夠的。 – porges 2012-02-07 23:39:36

+1

您正在分配一個字符串,其大小足以容納3個字符。 – 2012-02-07 23:39:54

回答

2

你的內存分配錯了,它應該是這樣的:

str=(char*)malloc(sizeof(char)*count_of_chars); 

記住爲count_of_chars設定的值。

+0

儘管'sizeof(char)*'是多餘的,因爲sizeof(char)被定義爲1 – 2012-02-07 23:42:53

+0

我認爲這是一個stil問題,你也可以用'wchar_t'替換'char',在UTF的情況下可以返回2 -16或4 UTF-32。 – rekire 2012-02-07 23:45:10

+0

如果我創建了char * str,但不做malloc,事實上會發生什麼? – engc 2012-02-07 23:45:25

2

兩個問題。首先,你需要聲明你的person函數高於你的主函數。所以:

void person(); 
void main() { 
    ... 
} 

void person() { 
    ... 
} 

應該工作正常。其次,你使用malloc的方式,你只會得到一個內存的char *。你需要做的:

str=(char*)malloc(sizeof(char)*stringLength); 

其中stringLength是你在你的字符串想的最多字符數量。

+0

在問題中有一個person()的原型。 – rekire 2012-02-07 23:51:58

+0

確定thanks.but有問題的fprintf文件,循環for不能正常工作,我沒有發現問題在前衛。 – engc 2012-02-07 23:51:59

+0

@rekire woops,我必須在沒有意識到的情況下滾動代碼。 – 2012-02-08 00:07:02