У меня есть следующий код, который объявляет char data[]
с простыми данными JSON. ({"x":123,"y":137}
) 17 символов.
Затем в моей основной функции я пытаюсь скопировать 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);
}
Выход:
{"x":125,"y":137}
(���{"x":1%
Что мне не хватает?
data[]
будетstatic char data[18] = "{\"x\":123,\"y\":137}";
. Обратите внимание, что этот массив состоит из 18 байтов, а не из 17; вам нужен дополнительный байт для нулевого терминатора в конце. - person r3mainer   schedule 09.04.2018sizeof(data);
дает... размер массиваdata
; это намного элегантнее, чем возвращать жестко запрограммированный17
. Инициализация может быть выполнена с помощьюstatic char data[] = "{\"x\":123,\"y\":137}"
. - person Jabberwocky   schedule 09.04.2018