[英]Using fgets() with char* type
我有一个关于将fgets()与char * string一起使用的简单问题。
....
char *temp;
FILE fp=fopen("test.txt", "r");
fgets(temp, 500, fp);
printf("%s", temp);
....
这段代码效果不好。
但是在我将char *temp
修改为char temp[100];
,代码运行良好,我打算。
这两者有什么区别?
当我用Google搜索它时,有人说必须使用malloc()将内存分配给char *
...
但我无法理解。
char * temp只是一个指针。 在开始时它不指向任何东西,可能它具有随机值。
fgets()从fp读取500个字节到内存地址,这个临时指针指向! 因此,它可以覆盖事物,它可以使分段错误,并且只有非常低的机会才能正常工作。
但char temp [500]是一个500字节长的数组。 这意味着,编译器会在进程开始时(或在调用函数时)进行分配。 因此,这500字节将是一个可用的500字节,但它有一个价格:你不能重新分配,调整大小,免费等等。
谷歌想要你的是这样的:
char *temp = (char*)malloc(500);
还有一个
free(temp);
在你不再需要它之后。
char *temp
未初始化,也就是说,它没有指向有效的内存。 要么使它成为一个数组( char temp[]
),要么使用malloc
为它分配内存。
当我们写作
char *temp ;
它表示temp
是一个未初始化的指向char
指针,即当前它不包含任何地址。
在使用fgets
您必须传递一个字符串,其中要复制从文件指针读取的字节。 链接因为temp
未初始化, fgets
看起来像这样
fgets(<no string> , 500 , fp ) ;
这是无效的。
因此,我们应该给出初始化的字符串,可以形成如下:
1) char *temp = malloc(sizeof(500)) ;
or
2) char temp[500] ;
因此,如果我们将初始化的字符串传递给fgets
,它看起来就像
fgets( < some string > , 500 , fp) ;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.