объясняет значение двух строк ниже
Строка
char writemessages[2][20]={"Hi", "Hello"};
определяет массив символов, имеющий 2 строки по 20 столбцов, и инициализирует его из-занулевой символ для завершения строк, которые может содержать массив, содержит 2 строки, содержащие до 19 символов, исключая нулевой символ.
При инициализации первая строка будет 'H'
'i'
, а затем нулевой символ, исекунда 'H'
'e'
'l'
'l'
'o'
затем нулевой символ
Это короткий путь, эквивалентный:
char writemessages[2][20]={ { 'H', 'i', 0 }, { 'H', 'e', 'l', 'l', 'o', 0 }};
или
char writemessages[2][20]= {
{ 'H', 'i', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 'H', 'e', 'l', 'l', 'o', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};
Строка
char readmessage[20];
определяет массив размером 20, так что допускается до 19 символов больше нулевого символа.
Почему я не могу использовать одномерный массив вместо od 2dмассив?
это просто выбор сгруппировать их в двухмерный массив, вы также можете использовать одномерные массивы:
char writemessage1[20] = "Hi";
char writemessage1[20] = "Hello";
printf("Writing to pipe - Message 1 is %s\n", writemessage1);
write(pipefds[1], writemessage1, sizeof(writemessage1));
...
printf("Writing to pipe - Message 2 is %s\n", writemessage2);
write(pipefds[1], writemessage2, sizeof(writemessage2));
Обратите внимание, код всегда отправляет 20 символов,изменение определения, чтобы иметь
char writemessage1[] = "Hi";
char writemessage1[] = "Hello";
write(pipefds[1], writemessage1, sizeof(writemessage1));
отправляет 3 символа, а write(pipefds[1], writemessage2, sizeof(writemessage2));
отправляет 6 символов из-за размера массивов (они автоматически выбираются и инициализируются, чтобы содержать завершающий нулевой символ)
возможно
printf("Writing to pipe - Message 2 is %s\n", writemessages[0]);
write(pipefds[1], writemessages[1], sizeof(writemessages[0]));
должно быть
printf("Writing to pipe - Message 2 is %s\n", writemessages[1]);
write(pipefds[1], writemessages[1], sizeof(writemessages[1]));
, чтобы отправить "Привет", а не снова "Привет"