-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

'='ビアが見つかります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 に答える