【发布时间】:2018-04-09 15:02:42
【问题描述】:
我有以下代码,用简单的 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] = '\0';
// --- broken string ---
printf("\n%s",data);
}
输出:
{"x":125,"y":137}
(���{"x":1%
我错过了什么?
【问题讨论】:
-
初始化
data[]的更简单方法是static char data[18] = "{\"x\":123,\"y\":137}";。请注意,这个数组由 18 个字节组成,而不是 17 个;最后你需要一个额外的字节作为空终止符。 -
@MFisherKDX 感谢您的输入,我已经处理了数据[0] 的初始化。如何通过 char 连接 char?
-
不相关:除了第一条评论:
sizeof(data);给出了...data数组的大小;这比返回硬编码的17优雅得多。可以使用static char data[] = "{\"x\":123,\"y\":137}"进行初始化。