从c中的char []创建字符串会返回错误的值

Shl*_*rtz 2 c string strcat

我有以下代码,声明一个char data[]简单的JSON数据.({"x":123,"y":137})17个字符长.

在我的主函数上,然后尝试char data[]通过char 复制char并使用strcat函数连接到新的字符串.

当我打印我要连接的字符时,它似乎是有效的字符,但是当我打印最后一个字符串时,它是错误的.

码:

#include <stdio.h>
#include <string.h>

int getDataLength(){
    return 17;
}
static char data[] = {'{','"','x','"',':','1','2','5',',','"','y','"',':','1','3','7','}'};
char getData(int i){
    return data[i];
}

int main() {
    int dataLength = getDataLength();
    char data[dataLength + 1];
    for(int i=0 ; i < dataLength ; i++){
        char chr = getData(i);
        // --- looking good ---
        printf("%c",chr);
        strcat(data,&chr);
    }
    data[dataLength] = '\0';
    // --- broken string ---
    printf("\n%s",data);
}
Run Code Online (Sandbox Code Playgroud)

输出:

{"x":125,"y":137}
(???{"x":1% 
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

Ger*_*rdh 6

您应该查看编译器警告.

strcat(data,&chr);
Run Code Online (Sandbox Code Playgroud)

strcat期望两个字符串作为参数.你的第二个参数是没有字符串但只有一个字符.缺少nul-termination并且您复制随机垃圾数据.

此外,data在开始添加之前不要初始化.

这两个错误都会导致程序中出现未定义的行为

  • 怎么样`data [i] = chr;`? (5认同)