Символьный массив печатает больше, чем я хотел в С - PullRequest
0 голосов
/ 15 сентября 2018

Зачем выводить дополнительные «КОМАНДА / рабочий стол / документ / myfilename» в конце команды массива символов?

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

int main() {
    char c_header[] = "COMMAND /desktop/document/myfilename \r\n\r\n";

    char command[8];

    for (size_t i = 0; i < 8 ; i++){
        command[i] = c_header[i];
    }
    command[7] = 's';

    printf( "command =%s\n", command);

}

Вывод

command =COMMANDsCOMMAND /desktop/document/myfilename 

Process finished with exit code 0

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018

Вам нужно завершить строку <'\0'> or NULL или целым числом 0.

0 голосов
/ 15 сентября 2018

Строки в оканчиваются на \0. Если вы попытаетесь обработать массив символов, который не заканчивается на \0, как строку (например, printf при ее использовании), он будет просто переполнен, пока вы не нажмете следующую \0, которая окажется в вашей куче .

Короче говоря, вам нужно явно указать, что у вас есть \0 в конце вашей строки:

/* Added an extra char for the '\0' */
char command[9]; 

for (size_t i = 0; i < 8 ; i++){
    command[i] = c_header[i];
}
command[7] = 's';
command[8] = '\0';
...