我有以下代码,它声明了一个带有简单JSON数据的map<int, foo&&>
。 (char data[]
)17个字符长。
在我的主函数上,我尝试用char复制{"x":123,"y":137}
char并使用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);
}
我错过了什么?
答案 0 :(得分:6)
您应该查看编译器警告。
strcat(data,&chr);
strcat
期望两个字符串作为参数。你的第二个参数是没有字符串但只有一个字符。
缺少nul-termination并且您复制随机垃圾数据。
此外,在开始添加data
之前,请不要初始化For Each Cell In ThisWorkbook.ActiveSheet.Range("A3:A22")
Variable = Variable1 + Variable2 + Variable3 + Variable4 + Variable5 + Variable6 + Variable7 + Variable8
Cell.Offset(0, 15).Value = Variable
Next Cell
。
这两个错误都会导致程序中出现未定义的行为。