C 输出乱码
- C/C++ code
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <stdarg.h>char * FormatString(char *fmt,...){ char *data = (char *)malloc(strlen(fmt) + 1); char *p; char c; int i = 0; int j = 0; va_list list; va_start(list,fmt); memset(data, '\0', strlen(data)); while((c=*fmt)) { if(*fmt == '%') { ++fmt; switch(*fmt) { case 's': p = va_arg(list, char *); data=(char *)realloc(data, strlen(data) +strlen(p) + 1); for(j=0;j<(int)strlen(p);j++) { data[i]=p[j]; i++; } break; } } else { data[i]=*fmt; i++; } fmt++; } data[i]='\0'; va_end(list); return data;}int main(){ printf("%s\n", FormatString("{\"%s\":\"%s\"}","1","nihao")); return 0;}字符串中间如果出现特殊字符就出现乱码了。。。
那里出问题了。。。
[解决办法]
对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。
[解决办法]
用单步跟踪了一下,发现每次调用
data=(char *)realloc(data, strlen(data) +strlen(p) + 1);
data里的字符串都会有变化,
根据realloc函数的描述,重新分配的空间首地址是可能变化的
因此建议你先保存data的数据,再调用realloc获得新地址后,接着用strcpy把原来的数据写回去
[解决办法]
或许是你在函数中没有对'\'和"{","}"字符进行解析。