我似乎无法解决这个问题。我正在使用.c代码打开文件并读取每一行。我想从txt文件中的第9行保存char * substr 4个字符。第5行包含 name = Me She;我想在char * substr中只有Meli.Need帮助。谢谢 这是c代码:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
FILE *fp;
char str[128];
char str1[128];
if((fp = fopen("/home/folder/file.txt", "r"))==NULL) {
printf("Cannot open file.\n");
exit(1);
}
int lin=0;
while(!feof(fp)) {
if(fgets(str, 126, fp))
printf("%s", str);
if (lin==8)
{
char *c= (char *) malloc(sizeof(char)*strlen(str)+1);
c= strndup(str, strlen(str)-5);?? not working?!!!
printf("d is:",c);
}
lin=lin+1;
}
fclose(fp);
return 0;
}
答案 0 :(得分:1)
你的printf错了。将其更改为printf("d is %s\n",c);
。
顺便说一句,strdup
分配所需的内存,因此您不必自己分配。 (事实上,你有内存泄漏)。
答案 1 :(得分:0)
您正在调用malloc()
然后直接用调用strndup()
覆盖其结果,这会泄漏内存。
此外,strndup()
调用中的逻辑看起来不对。如果您想跳过前5个字符,则应该str + 5
。
如果您有strdup()
,请使用:
if (lin==9)
{
char *name = strdup(str + 5);
printf("name is: '%s'\n", name != NULL ? name : "(failed)");
}
然后你应该break
离开循环。另请注意,指针name
超出了范围,因此例如,它不能用于循环外的代码。