【问题标题】:Create string from char[] in c returns wrong value从 c 中的 char[] 创建字符串返回错误值
【发布时间】: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}" 进行初始化。

标签: c string strcat


【解决方案1】:

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

strcat(data,&chr);

strcat 需要两个字符串作为参数。您的第二个参数不是字符串,而是一个字符。 缺少 nul 终止,您复制随机垃圾数据。

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

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

【讨论】:

  • 知道了,但是如何将该字符连接到数据字符串?
  • data[i] = chr; 呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-19
  • 2015-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-05
  • 1970-01-01
相关资源
最近更新 更多