(Программирование на C) Как вставить строку в массив символов, а затем распечатать все элементы этого массива? - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть эта строка, которая представлена ​​в виде массива символов temp.И я хочу вставить этот массив символов в другой массив temp_list, а затем распечатать содержимое этого массива.Другими словами, хранение множества символьных массивов в одном массиве.Может кто-нибудь сказать мне, если это возможно, и как я могу заставить его работать?

Это пример того, что я пытаюсь выполнить:

int main()
{
    char temp[5] = "begin";
    char temp_list [10];
    temp_list[0] = temp;

    for (int i = 0; i < strlen(temp_list); i++)
    {
        printf("Labels: %s,", temp_list[i]);
    }
}

Когда я запускаю эту программу, онапечатает тарабарщину.

Любая форма руководства будет очень признательна.Спасибо.

Редактировать:

Спасибо за ответы.Они все полезны.Но у меня другой вопрос ... что если у меня есть несколько массивов символов, которые я хочу вставить в temp_list?Использование strcpy несколько раз, похоже, не работает, так как я предполагаю, что функция в основном заменяет все содержимое temp_list на строку, переданную с strcpy?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

У вас есть три проблемы здесь.Во-первых, temp недостаточно велик, чтобы содержать строку «начало».Строки в C заканчиваются нулем, так что эта строка на самом деле занимает 6 байтов, а не 5. Поэтому сделайте temp достаточно большим, чтобы вместить эту строку:

char temp[6] = "begin";

Или еще лучше:

char temp[] = "begin";

Какой размер массива соответствует размеру строки.Вторая проблема здесь:

temp_list[0] = temp;

Вы присваиваете массив (фактически указатель на первый элемент массива) первому элементу другого массива.Это несоответствие типов присвоения char * char.Даже если типы совпадают, строки копируются не так.Для этого используйте функцию strcpy:

strcpy(temp_list, temp);

Наконец, вы неправильно печатаете результат:

for (int i = 0; i < strlen(temp_list); i++)
{
    printf("Labels: %s,", temp_list[i]);
}

Спецификатор формата %s ожидает указатель наchar массив для печати строки, но вы передаете один символ.Несоответствие спецификаторов формата вызывает неопределенное поведение .

Для печати одиночных символов используйте %c вместо:

for (int i = 0; i < strlen(temp_list); i++)
{
    printf("Labels: %c,", temp_list[i]);
}

Или вы можете избавиться от цикла и просто напечататьвся строка, используя %s:

printf("Labels: %s", temp_list);
0 голосов
/ 25 февраля 2019

Существует множество заблуждений относительно строк.Ваш массив temp должен быть достаточно большим, чтобы также хранить нулевой терминатор, поэтому его размер должен быть не менее 6 в этом случае:

char temp[6] = "begin"; // 5 chars plus the null terminator

Чтобы скопировать строку, используйте strcpy:

char temp_list[10];
strcpy(temp_list, temp);

Чтобы напечатать его, передайте temp_list, а не temp_list[i], также вам не нужен этот цикл:

printf("%s\n", temp_list);

Окончательная программа может выглядеть следующим образом:

int main()
{
    char temp[6] = "begin";
    char temp_list[10];
    strcpy(temp_list, temp);
    printf("%s\n", temp_list);
    return 0;
}
...