所以我有一个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');
}
任何形式的见解都会有所帮助,我只是被困住了。
答案 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函数会分配您需要释放的内存,否则会出现内存泄漏。