C从文件中获取字符串数据,输出一些意外结果

时间:2013-11-17 17:55:27

标签: c

所以我有一个makefile类型文件,我首先尝试获取所述文件的每一行并将其存储到一个字符串数组中,该数组的每个索引都是一个单独的行。我发现代码的这一部分工作正常,但后来我接受了字符串数组,我尝试从makefile中取出独立且依赖的每个单独的文件,输出字符串数组,输出如下:

util.hmain.c stk.o util.o▒-▒
util.cmain.c stk.o util.o▒-▒
stk.hcmain.c stk.o util.o▒-▒
stk.ccmain.c stk.o util.o▒-▒
main.cmain.c stk.o util.o▒-▒
f▒c▒H▒▒ [Ð▒▒▒▒▒▒▒▒▒▒▒▒▒▒H▒▒8L▒D$PH▒T$HI▒▒L▒L$XeH▒

我真的很困惑为什么它输出这样奇怪的字符,是内存泄漏还是什么?我根本不知道如何解决它。

这是产生这种输出的以下代码..

char c;
int newline_count = 0;
while ( (c=fgetc(makeFile)) != EOF ) {
    if ( c == '\n' )
        newline_count++;
}

//Inputting file string data into a array of char arrays for simplicity.
char *fileString[newline_count];
rewind(makeFile);
int i;
int i2 = 0;
int i3 = 0;

for(i = 0; i < string_size; i++){
    char temp[500];
    temp[i3] = fgetc(makeFile);
    if(temp[i3] == '\n'){
        temp[i3] = '\0';
        fileString[i2] = strdup(temp);
        i2++;
        i3 = 0;
    }else{
        i3++;
    }
}


//Getting each individual file
char *files[newline_count];
for(i = 0; i < newline_count; i++){
    char temp[500];
    if(strstr(fileString[i], ":") != NULL){

    }else{
        i2 = 0;
        do{
            temp[i2] = fileString[i][i2];
            i2++;
        }while(!isspace(fileString[i][i2]));
        files[i] = strdup(temp);
    }
}


for(i = 0; i < newline_count; i++){
    printf("%s %c", files[i], '\n');
}

任何形式的见解都会有所帮助,我只是被困住了。

1 个答案:

答案 0 :(得分:1)

下面:

    do{
        temp[i2] = fileString[i][i2];
        i2++;
    }while(!isspace(fileString[i][i2]));

将字符从fileString复制到temp而不检查字符串结尾。您应该用以下内容替换条件:

    }while(!isspace(fileString[i][i2]) && fileString[i][i2]!='\0');

但这还不够,因为它在达到'\ 0'时停止并且不复制它。那么,在那之后,你应该添加:

temp[i2] = '\0';

另请注意,strdup函数会分配您需要释放的内存,否则会出现内存泄漏。