Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从字符数组中减去若干字符_C_Ubuntu_File Io - Fatal编程技术网

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];

我似乎无法解决这个问题。我使用一个.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];

  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()
,请确保一行不要太长,