首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C 输出乱码解决办法

2012-06-15 
C 输出乱码C/C++ code#include stdio.h#include string.h#include stdlib.h#include stdarg.hchar

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

热点排行