скопировать массив символов в элемент массива - PullRequest
0 голосов
/ 20 октября 2018

Я пишу функцию для извлечения информации между каждыми двумя символами новой строки. Я сталкиваюсь с проблемой при копировании массива char 'data' в элемент массива 'info'.

#include <stdio.h>
#include <string.h>

void query_db();

char buffer[100]="+HTTPREAD:86\nUdara\nNO\n+94123456789\nOK";
volatile int buffer_pointer;
char info[3][20];

int main()
{
    query_db();
    return 0;
}

void query_db(){
    unsigned char j=0,start,end,amount;
    char data[20];
    buffer_pointer = 0;
    while( buffer_pointer < strlen(buffer)){
        if(buffer[buffer_pointer] == 10){
            if(j==0){
               start = buffer_pointer+1;
               printf("headstart = %u\n",start);
            }
            else{
                printf("\n%u start = %u\n",j,start);
                end = buffer_pointer;
                amount = end - start;
                strncpy(data, buffer+start,amount);
                memcpy(info[j-1],data,strlen(data));//need help in this line
                printf("data = %s\n",info[j-1][20]);
                memset(data,0,20);
                start = end+1;
                printf("%u end = %u\n",j,end);
            }
            j++;
        }
        buffer_pointer++;
    }
}

КогдаЯ выполняю приведенный выше код, он дает следующий вывод вместо того, что я ожидал.

headstart = 13

1 start = 13
data = (null)
1 end = 18

2 start = 19
data = (null)
2 end = 21

3 start = 22
data = (null)
3 end = 34

Предпочтительный вывод:

headstart = 13

1 start = 13
data = Udara
1 end = 18

2 start = 19
data = NO
2 end = 21

3 start = 22
data = +94123456789
3 end = 34

Ответы [ 2 ]

0 голосов
/ 20 октября 2018
memcpy((char *)&info[j-1],data,strlen(data));
0 голосов
/ 20 октября 2018

Проблема с неправильным выводом здесь:

printf("data = %s\n",info[j-1][20]);

Вы используете формат "%s" для печати строки, но info[j-1][20] - это один char.И это тоже без границ.

Вы, вероятно, хотели использовать info[j-1].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...