从 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
。
这两个错误都会导致您的程序出现未定义的行为。
我有以下代码,它用简单的 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
。
这两个错误都会导致您的程序出现未定义的行为。