проблемы с memcpy строк - PullRequest
       4

проблемы с memcpy строк

1 голос
/ 30 сентября 2011

Я пытаюсь

  • взять две строки (message1, message2),
  • назначить str1 для message1, если message1 и message2 пусты,
  • назначить str2на message2, если оно пустое и message1 заполнено,
  • и сохраните сообщение 2 поверх сообщения 1 и поместите message2 == message3, если и message1, и message2 были заполнены.

Я получаю странные результаты, как показано.Но memcpy не работает.(Я знаю, что это моя вина.)

input

message1: ffW
message 2: a
message 3 (2 writes over 1, 3 writes over 2): bbb

MESSAGE 1a: ffW 
MESSAGE 2a: a_W 
MESSAGE 1ab: a_W 
MESSAGE 2ab: a_W 
MESSAGE 1b: a_W 
MESSAGE 2b: bbb 

следующий:

INPUT:
message1: a
message2: abcde
message3: abcdefg

MESSAGE 1a: a�� 
MESSAGE 2a: abcde 
MESSAGE 1ab: abcd 
MESSAGE 2ab: abcde 
MESSAGE 1b: abcd 
MESSAGE 2b: abcdefg 

.

    if (message1[0] == '\0')
    {
        memcpy(message1, echoBuffer, sizeof echoBuffer);
        fprintf(stderr, "MESSAGE 1: %s \n", message1);
    }
    else if (message1[0] != '\0' && message2[0] == '\0')
    {
        memcpy(message2, echoBuffer, sizeof echoBuffer);
        fprintf(stderr, "MESSAGE 2: %s \n", message2);
    }
    else if (message1[0] != '\0' && message2[0] != '\0')
    {
        fprintf(stderr, "MESSAGE 1a: %s \n", message1);
        fprintf(stderr, "MESSAGE 2a: %s \n", message2);
        memcpy(message1, message2, sizeof message2);
        fprintf(stderr, "MESSAGE 1ab: %s \n", message1);
        fprintf(stderr, "MESSAGE 2ab: %s \n", message2);
        memcpy(message2, echoBuffer, sizeof echoBuffer);
        fprintf(stderr, "MESSAGE 1b: %s \n", message1);
        fprintf(stderr, "MESSAGE 2b: %s \n", message2);
    }
}

Кто-нибудь знаетчто случилось?Эта проблема мучает меня.

Я думаю, что сообщения и echoBuffer имеют размер 100 символов.

Ответы [ 2 ]

3 голосов
/ 30 сентября 2011

Есть ли особая причина для использования memcpy? Я считаю, что strcpy (char * dest, char * source) будет проще в использовании. Может быть, это может решить вашу проблему

Вы должны включить string.h, чтобы использовать его

1 голос
/ 30 сентября 2011

Ты уверен насчет sizeof?Как я помню, sizeof показывает размер типа данных, а не реальную длину массивов / строк символов.

...