从 char[] in c returns 错误值创建字符串

Create string from char[] in c returns wrong value

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

然后,在我的主要函数中,我尝试逐个复制 char data[] 个字符,并使用 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] = '[=11=]';
    // --- broken string ---
    printf("\n%s",data);
}

输出:

{"x":125,"y":137}
(���{"x":1% 

我错过了什么?

你应该看看你的编译器警告。

strcat(data,&chr);

strcat 需要两个字符串作为参数。您的第二个参数不是字符串,而只是一个字符。 nul-termination 丢失,您复制随机垃圾数据。

此外,您在开始添加之前不会初始化 data

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