读书人

C 输出乱码解决办法

发布时间: 2012-06-15 19:37:05 作者: rapoo

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把原来的数据写回去
[解决办法]
或许是你在函数中没有对'\'和"{","}"字符进行解析。

读书人网 >C语言

热点推荐