字符串数组输出为什么会乱码? 代码如下

qq_33569674 2016-08-05 08:37:04
#include <stdio.h>
int main(int argc, char *argv[])
{
char *buf[] = {"char", "int", "double"};
printf("%c\n", *(**(&buf + 1) - 1));

return 0;
}
...全文
706 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-08-07
  • 打赏
  • 举报
回复
仅供参考:
void HexDump(char *buf,int len,int addr) {
    int i,j,k;
    char binstr[80];

    for (i=0;i<len;i++) {
        if (0==(i%16)) {
            sprintf(binstr,"%08x -",i+addr);
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
        } else if (15==(i%16)) {
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
            sprintf(binstr,"%s  ",binstr);
            for (j=i-15;j<=i;j++) {
                sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
            }
            printf("%s\n",binstr);
        } else {
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
        }
    }
    if (0!=(i%16)) {
        k=16-(i%16);
        for (j=0;j<k;j++) {
            sprintf(binstr,"%s   ",binstr);
        }
        sprintf(binstr,"%s  ",binstr);
        k=16-k;
        for (j=i-k;j<i;j++) {
            sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
        }
        printf("%s\n",binstr);
    }
}
赵4老师 2016-08-07
  • 打赏
  • 举报
回复
对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A
paschen 版主 2016-08-06
  • 打赏
  • 举报
回复
&buf + 1 楼主想表达什么意思??
Game_Hacker 2016-08-06
  • 打赏
  • 举报
回复
&buf代表取整个指针数组buf的地址,+1相当于移动了整个数组的长度,也就是移到了整个数组相邻的下一片未知内存,解引用一次* 代表下一片未知内存的与数组中的"char"对应位置的地址,再解引用一次*代表地址里的内容,然后再减一,然而由于未知内存里面并没有内容,所以这里减一没有任何的意义,更不能再解引用一次*,这个表达式如果改成**(*(&buf+1)-1)就有值了,答案是字符d("double"的第一个元素),有问题请多指教!我也是刚学c++
  • 打赏
  • 举报
回复
用这种方式吧: printf("%c\n",buf[0][0]); 一大堆符号,看着累不。。。
tony2278 2016-08-06
  • 打赏
  • 举报
回复
*(&buf + 1) = h *(&buf + 1) - 1 = g *(**(&buf + 1) - 1) = 开始乱码 printf("%c\n", *(**(&buf + 1) - 1)); = 继续乱码 以上是我的理解,请多多指教。。
qq_33569674 2016-08-06
  • 打赏
  • 举报
回复
如果数组里面都是数字的话,&buf + 1 表示数组的字符空间长度。则 printf("%c\n", *(**(&buf + 1) - 1));可以打印出最后一个元素,这是关于指针数组和数组指针的问题,而用相同的方法如果是字符串的话则打出来的是乱码,求高手解答
qq_33569674 2016-08-06
  • 打赏
  • 举报
回复
如果数组里面都是数字的话,&buf + 1 表示数组的字符空间长度。则 printf("%c\n", *(**(&buf + 1) - 1));可以打印出最后一个元素,这是关于指针数组和数组指针的问题,而用相同的方法如果是字符串的话则打出来的是乱码,求高手解答

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧