打印char的ASCII值会产生意外的输出

时间:2016-01-18 12:31:58

标签: c char printf

我知道,stackoverflow上有一些解决方案。但我不知道为什么不开展一项工作。

            char *ink[90]
            strcpy(ink, "hi");
            printf("stepiii %c \n",ink[0] );
            printf("ascii %d\n",ink[0] );

而不是" ascii 104"返回错误值,如

  

" ascii 26984"

我做错了什么?

2 个答案:

答案 0 :(得分:3)

在您的代码中,

  char *ink[90]

错了。您不需要指针数组,如片段的其余部分所示。将其更改为

  char ink[90]= {0};

如果您想知道以前的输出,那么该代码会调用undefined behavior。因此,输出基本上没有意义,绝不能被信任。

答案 1 :(得分:2)

您正在创建一个指针数组并将字符复制到它。你需要一个 var bsMSG = function (msg, type, seprator) { html = ''; msg = (msg instanceof Array ?msg:[msg]); type = type || 'success'; seprator = seprator || '<br/>'; b = ''; for (i = 0; i < msg.length; i++) { html += b + msg[i]; b = seprator; } html = "<div class='alert alert-" + type + "'>" + html + "</div>"; return html; }; // usage if (response.type == "error") { $('#msgs').html(bsMSG(response.text,'danger')); }else{ $('#msgs').html(bsMSG(response.text')); } 的数组并将字符复制到它,就像这样

char

您所遇到的错误是因为char ink[90] strcpy(ink, "hi"); printf("stepiii %c \n", ink[0]); printf("ascii %d\n", ink[0]); 是数组中第一个指针的地址,您使用ink[0]初始化数组,这会导致不兼容指针类型警告,启用编译警告以避免这种情况。

它在您的代码中的方式调用未定义的行为,您的程序可能会崩溃或任何可能发生的事情。印刷值没有意义。