-2

可能重复:
memcpy 和 malloc 打印出一个字符串

我需要在“=”符号之后找到文本文件的一行中的字符数,直到行尾或“#”符号。然后我需要向后工作,直到我到达第一个非空格并memcpy用来打印出字符串。

示例:如果行说:myprop=this is a sentence #value,我需要它打印出:“这是一个句子”。这是我打开文件并对其进行malloc后的代码。

while(fgets(buffer, 1024, fp) != NULL)
{
 if((strstr(buffer, propkey)) != NULL)
 {
  for (

   //need help here


  memcpy(value, buffer + 7, 7);  //the 7 represents the # of characters till the equal sign
  printf("\nvalue is '%s'\n", value);
  }
 } 
4

2 回答 2

1

你找到了'='via strchr()

从那里循环直到你点击'\0''#'。计算循环。在循环内部,检查第一个非空格 ( isspace()),并记住(即变量)在哪里找到它。

在循环之后,您将获得所需的所有信息:复制(从第一个非空白的记忆位置开始)相等的字节数(循环数 - 第一个非空白的位置)。

话虽如此,一旦您在 21 天国家/地区完成教程/C,您应该真正使用现成的库来处理此类内容。

于 2013-01-17T16:23:26.690 回答
0

你可以这样得到它sscanf

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char buf[] = "myprop= this is a sentence #comment";
char value[100];

void get_value(char *buf, char *value)
{
    int len;
    sscanf(buf,"%*[^=]= %[^#]",value);
    len = strlen(value);
    while((--len) && value[len]==' ')
        value[len] = '\0';
}

int main()
{
    get_value(buf, value);
    printf ("The value is __%s__\n",value);
}

sscanf(buf,"%*[^=]= %[^#]",value);:这将获取从=直到的字符串,#并且开头的空格字符不会被加盖,但末尾的空格字符将被加盖

并且要删除大写字符串末尾的空格字符,我使用了以下代码:

len = strlen(value);
while((--len) && value[len]==' ')
    value[len] = '\0';
于 2013-01-17T17:32:52.503 回答