2016-10-04 10 views
0

私はこれらの文字を保持するchar * temp_stringを持っています。最後に\0を含むHello\nWor'ld\\\042です。フォーマットされた文字列と書式なしの文字列C

これは私が私の文字列を作る方法です。

char * addDataChunk(char * data,char c) 
{ 
    char * p; 
    if(data==NULL) 
    { 
     if(!(data=(char*)malloc(sizeof(char)*2))){ 
      printf("malloc error\n"); 
      throwInternError(); 
     } 
     data[0]=c; 
     data[1]='\0'; 
     return data; 
    } 
    else 
    { 
     if((p = (char*)realloc(data,((strlen(data)+2)*sizeof(char))))){ 
      data = p; 
     } 
     else{ 
      printf("realloc error\n"); 
      throwInternError(); 
     } 
     data[strlen(data)+1] = '\0'; 
     data[strlen(data)] = c; 
     return data; 
    } 
} 

これは私がaddDataChunkを使用する方法である:

temp_char =getc(pFile); 
temp_string=addDataChunk(temp_string,temp_char); 

私はこの2行行うと:

printf("%s\n","Hello\nWor'ld\\\042"); 
printf("%s\n",temp_string); 

を私が手これは:

Hello 
Wor'ld\" 
Hello\nWor'ld\\\042 

出力が異なる理由を誰かが知っていますか?今

+2

http://stackoverflow.com/help/mcve – ceving

+1

は[MCVE]を表示し、それ以外の質問はすぐに閉じ/ downvotedされます。 –

+0

私は質問を編集しました。 – nocturne

答えて

2

あなたtexteファイルが

こんにちは\ nWor'ld \\ 042

が含まれていますがgetcと文字で、このファイルの文字を読めば、あなたは意志つまり、逐語的に文字を取得します連続して取得:

Hello\n、...、\\\042

一方string literal"Hello\nWor'ld\\\042"はにコンパイラによって変換されます。

Hello\n、...、\"

実際\nはASCII文字10(ラインフィード)に変換され、\\\に翻訳され、\042は、その値が8進数で"である042であるASCII文字に変換されます。

escape sequencesについてお読みください。

+0

これは、ありがとう – nocturne

-2

これを使用してください:

char* temp_string = "Hello\n world\\\042"; 
printf(" %s","Hello\nworld\\\042\n"); 
printf("%s",temp_string); 
関連する問題