2016-10-04 92 views
0

我有一个char * temp_string我在这里保留这些字符:Hello\nWor'ld\\\042包括\0最后。格式化与未格式化的字符串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); 

当我做这些两行:

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\, ...,\,\,\, 0, 4,2

在另一方面string literal"Hello\nWor'ld\\\042"将被编译器转化为:

Hello\n,...,\"

实际上\n将被翻译成ASCII字符10(换行),\\将被翻译成\\042将被翻译成ASCII字符,它的值在八进制是042是"

您应该阅读约escape sequences

+0

中是皱眉的,这是非常感谢的 – nocturne

-2

请使用:

char* temp_string = "Hello\n world\\\042"; 
printf(" %s","Hello\nworld\\\042\n"); 
printf("%s",temp_string);