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

时间:2018-04-09 15:02:42

标签: c string strcat

我有以下代码,它声明了一个带有简单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);
}

我错过了什么?

1 个答案:

答案 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

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