Я хотел бы отобразить первую букву каждого индекса массива. например:
myChar[0] должен иметь вывод «y» и myChar[1] «n»
#include <stdio.h>
#include <string.h>
void try(){
char myChar[3][20];
strcpy(myChar[0], "yee");
strcpy(myChar[1], "no");
printf("%s\t%s", myChar[0], myChar[1]);
}
int main(){
try();
return 0;
}
есть ли простой способ сделать это?
Да.
printf("%.1s\t%.1s\n", myChar[0], myChar[1]);
.1s
ограничивает используемую длину выводимой ссылочной строки.
Я добавил '\n'
к строке, чтобы очистить выходной буфер.
Из комментариев ниже вытекают два соображения:
NUL
.При конкретном определении двух строковых буферов (двумерный массив char
) язык гарантирует, что неиспользуемым байтам массива будет присвоено значение '\0'
:
char myChar[3][20] = { 0 };
Без этой инициализации массива ссылка на байты, превышающие установленные strcpy()
, ссылается на неинициализированные данные.
Предполагая, что исходный код не содержит UB (ссылки за пределы массива), используются указатели на строки, арифметика указателей и малоиспользуемые возможности достаточной длины printf()
(например: "%.1s") устраняет необходимость в дополнительном коде для предотвращения обработки NUL
printf( "%c...
.
printf( "%.1s\t%.1s\n", myChar[0] + 2, myChar[1] + 2 ); // 3rd char of both strings
Альтернативно:
printf( "%.1s\t%.1s\n", &myChar[0][2], &myChar[1][2] ); // 3rd char of both strings
Это решение лучше моего, если строка может быть пустой, потому что в этом случае нулевой символ не будет печататься. Поэтому я голосую за это.
@AndreasWenzel Спасибо. :-)
Крайние случаи обычно - моя ахиллесова пята... :-)
я скомпилировал @Fe2O3
@ 7Ver7dict7 Результат использования этого решения соответствует вашей заявленной цели «распечатать первый символ каждого из двух массивов символов/строк». Поэтому писать «распечатывает каждую букву до той, которую я искал» не имеет смысла. (Хотите уточнить? Я готов просто отпустить ситуацию...)
да, я просто хотел конкретный индекс. Не знаю, как это описать.
Чтобы напечатать один символ, вам следует использовать спецификатор формата %c
вместо %s
. Дополнительную информацию смотрите в документации printf.
Кроме того, первый символ myChar[0]
— это myChar[0][0]
, а первый символ myChar[1]
— myChar[1][0]
.
Если вы исправите эти проблемы, ваш код должен выглядеть так:
#include <stdio.h>
#include <string.h>
int main( void )
{
char myChar[2][20];
strcpy( myChar[0], "yee" );
strcpy( myChar[1], "no" );
printf( "%c %c\n", myChar[0][0], myChar[1][0] );
}
Это напечатает следующее:
y n
в чём-то вы правы, но я искал конкретно 1 букву. ваш код распечатывает каждую букву до той, которую я искал. но это тоже круто. Большое спасибо