C 从字符数组中减去若干字符
我似乎无法解决这个问题。我使用一个.c代码打开一个文件并读取每一行。我想将txt文件第9行中的4个字符保存在char*substr中。第5行包含 name=我她;我想在char*substr中加入Meli。需要帮助。谢谢 下面是c代码:C 从字符数组中减去若干字符,c,ubuntu,file-io,C,Ubuntu,File Io,我似乎无法解决这个问题。我使用一个.c代码打开一个文件并读取每一行。我想将txt文件第9行中的4个字符保存在char*substr中。第5行包含 name=我她;我想在char*substr中加入Meli。需要帮助。谢谢 下面是c代码: #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { FILE *fp; char str[128]; char str1[128];
#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;
}
#包括
#包括
int main(int argc,char*argv[])
{
文件*fp;
char-str[128];
char-str1[128];
if((fp=fopen(“/home/folder/file.txt”,“r”))==NULL){
printf(“无法打开文件。\n”);
出口(1);
}
int-lin=0;
而(!feof(fp)){
如果(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);?不工作?!!!
printf(“d是:”,c);
}
lin=lin+1;
}
fclose(fp);
返回0;
}
您的printf错误。将其更改为printf(“d是%s\n”,c)代码>
顺便说一下,strdup
分配所需的内存,这样您就不必自己分配了。(事实上,您有内存泄漏)。您的printf错误。将其更改为printf(“d是%s\n”,c)代码>
顺便说一下,strdup
分配所需的内存,这样您就不必自己分配了。(事实上,您有内存泄漏)。您正在调用malloc()
,然后直接用调用strndup()
的结果覆盖其结果,这会泄漏内存
另外,strndup()
调用中的逻辑看起来是错误的。如果要跳过前5个字符,则应使用str+5
如果您有strdup()
,请使用:
if (lin==9)
{
char *name = strdup(str + 5);
printf("name is: '%s'\n", name != NULL ? name : "(failed)");
}
然后,您可能应该中断循环。还要注意的是,指针name
超出了范围,因此它不可用于循环外的编码。您调用malloc()
,然后直接用调用strndup()
的结果覆盖它,这会泄漏内存
另外,strndup()
调用中的逻辑看起来是错误的。如果要跳过前5个字符,则应使用str+5
如果您有strdup()
,请使用:
if (lin==9)
{
char *name = strdup(str + 5);
printf("name is: '%s'\n", name != NULL ? name : "(failed)");
}
然后,您可能应该中断循环。另外请注意,指针name
超出了范围,因此它不可用于循环之外的代码。请hellp:)您能更正我的帖子吗?我不知道怎么解决这个问题。如我所说,只需更改printf
,并删除malloc
行。例如,如何仅从位置3提取4个字符?strndup(str+2,4)代码>(2是要跳过的字符。4是复制4个字符)请hellp:)你能更正我的帖子吗?我不知道怎么解决这个问题。如我所说,只需更改printf
,并删除malloc
行。例如,如何仅从位置3提取4个字符?strndup(str+2,4)代码>(2是要跳过的字符。4是复制4个字符)他想跳过最后的5个字符。我想发送前4个字符,只取4个字符。我的例子是:name=Me-SHelila。。。我只想带走我自己。之后,我还想使用strcpy(concat,name)在char*concat中复制name;在我的例子中,它打印我想要的字符数+整行。为什么?他想跳过最后的5个字符。我想发送前4个字符,只取4个。我的例子是:name=Me-SHelila。。。我只想带走我自己。之后,我还想使用strcpy(concat,name)在char*concat中复制name;在我的例子中,它打印我想要的字符数+整行。为什么?如果它是您需要的文件中的第九行,那么将If(lin==9)
更改为If(lin==8)
,因为lin
被初始化为0
。请注意您的问题,如果您使用fgets()
,请确保一行不会太长,如果它是您需要的文件中的第九行,则将if(lin==9)
更改为if(lin==8)
,因为lin
已初始化为0
。请注意您的问题,打字更少,拼写更完整。如果使用fgets()
,请确保一行不要太长,