2012-02-07 66 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

相关问题