计算一行C中的字符数

时间:2013-01-17 16:09:59

标签: c strstr

  

可能重复:
  memcpy and malloc to print out a string

我需要在'='符号之后找到文本文件行中的字符数,直到行的末尾或'#'符号。然后我需要向后工作直到我到达第一个非空白空间并使用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);
  }
 } 

2 个答案:

答案 0 :(得分:1)

您可以通过'='找到strchr()

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

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

这就是说,一旦你在21天的国家/地区退出教程/ C,你应该真的使用现成的库来做这样的事情..

答案 1 :(得分: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';