【发布时间】:2013-10-22 02:26:35
【问题描述】:
我正在尝试使用 fgets 安全地获取未知长度的字符串
这是迄今为止我能够提出的代码,但现在我被困在如何继续前进。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#define DEFLEN 4
#define CHUNKSZ 2
int i = 0;
int size =0;
int size2 =0;
char* ln1;
char* ln2;
FILE *fpin;
char *getStrFromFile( FILE *fpins )/*file stream to read string from */
{
DEFLEN = malloc( CHUNKSZ *sizeof(int));
while(1){
if( fgets(ln1+size2, DEFLEN, fpin) == NULL) {
if(size > 0){
return (ln1);
}
else {
return (NULL);
free(ln1);
}
}
else{
size2=strlen(ln1);
if(ln1[size2 -1] == '\n'){
return (ln1);
}
else{
ln2=malloc(size+CHUNKSZ * sizeof(char));
assert(ln2);
strcpy(ln2, ln1);
free (ln1);
ln1 = ln2;
return (ln1);
}
}
}
我也收到 DEFLEN = malloc 行的错误
错误:需要左值作为赋值的左操作数
【问题讨论】:
-
你想实现readline吗?
-
我更担心代码编译,而担心它是否有效。您正在将地址分配给整数常量。而且您的尺寸不一致。您的初始尺寸为
CHUNKSZ * sizeof(int),后续尺寸为CHUNKSZ * sizeof(char)。您可能需要修复它以及大量其他错误。最后,none 中的变量应该是全局变量; 无.