Printing strings from an array in a function in C

Refresh

December 2018

Views

483 time

4

I keep getting a crash in the case 4 of my switch in my main function and cant fix it.

I will explain the code a bit and hope you guys can help me:

Initializing the function

void function1(char[]);

Declaring the array of strings

const char *my_array[] = {
"Array of strings one",
"Array of strings two",
"Array of strings three"};

Looping through the array of strings in the main function (This works correctly, it prints the array of strings)

int i;
for (i=0; i < 3; i++) {
    printf("%s\n", my_array[i]);
}

The code in the switch function (still in the main function)

case 4:
            function1(my_array);
            break;

I've tested and all of the previous code works correctly, the problem is in here (outside the main function):

void function1(char my_array[]) {
for (i=0; i < 3; i++) {
    printf("%s\n", my_array[i]);
}
printf("\n");}

When I execute the case 4 of the switch, it crashes.

The 2 warning the log gives:

warning: passing argument 1 of 'function1' from incompatible pointer type

warning: format '%s' expects argument of type 'char *', but argument 2 has type 'int' [-Wformat=]

Sorry if the explanation its a bit unclear I tried as hard as I could for it to be easy to understand.

I really hope you guys can help me, thanks!!

4 answers

9

Первое предупреждение, а именно

предупреждение: проходя аргумент 1 из «function1» от несовместимого типа указателя

рассказывает: вы передаете массив символьных указателей, но функция декларация говорит, что хочет простой указатель на символ.

Второе предупреждение говорит вам то же самое с внутренней функции:

предупреждение: формат «% s» ожидает аргумент типа «символ *», но аргумент 2 имеет тип «Int» [-Wformat =]

Формат хочет строку C, но вы передаете один char* .

Все , что вам нужно сделать , чтобы исправить это , чтобы добавить недостающую звездочку к объявлению function1:

void function1(const char *my_array[])
//             ^^^^^      ^

Пока вы на него, добавить , constчтобы соответствовать декларации my_arrayв main.

* Компилятор говорит , что вы пропускание int, не char, потому что printfпринимают переменное число параметров, так что компилятор применяет некоторые преобразования аргументов функции. Одним из таких преобразований является продвижение всех charс до intс.

1

Пожалуйста, внимательно посмотреть на функции замедления

недействительными function1 (символ my_array [])

Вы передаете в массив символов, который является строка (которая, очевидно, вы не хотите). Вторая проблема связана с этой линией,

printf("%s\n", my_array[i]);

когда вы говорите my_array [я], вы пытаетесь получить доступ к символу в «Я» позиции и использовать% S для печати символа (который является крах). Чтобы напечатать символ , который вы должны написать это

printf(%c\n", my_array[i]);

Теперь давайте исправить код согласно вашему требованию, вы должны иметь функцию, которая принимает массив указателя полукокса (или строки)

void function1(const char* my_array[])
{
    for (size_t i = 0; i < 3; i++)
    {
        printf("%s\n", my_array[i]);
    }
    printf("\n");
}

Пожалуйста, обратите внимание на использование «сопзЬ» (если вы просто должны прочитать / распечатать данные из массива строк). Пожалуйста, обратите внимание отправки размера массива слишком и использовать этот размер для прохода через петлю.

void function1(const char* my_array[], size_t n)
{
    for (size_t i = 0; i < n; i++)
    {
        printf("%s\n", my_array[i]);
    }
    printf("\n");
}
1

Одобренные ванты Я пробовал все свои решения, и когда я добавить «сопзИ» в функции он дает мне «ошибку в противоречивых типах» ошибки.

Чтение всех вас, я понял, что я проходил только символ в функции не строка символов (* отсутствовал в Initialize функции и функции).

Я изменил это:

void function1(char[]);

К этому:

void function1(char*[]);

и это:

    void function1(char my_array[]) {
    for (i=0; i < 3; i++) {
    printf("%s\n", my_array[i]);
    }
    printf("\n");
}

к этому:

    void function1(char* my_array[]) {
    for (i=0; i < 3; i++) {
    printf("%s\n", my_array[i]);
    }
    printf("\n");
}

И это работает как шарм!

К сожалению, если это было немного нуб вопрос, но я начинаю с программированием C.

Спасибо всем за ваши ответы, которые я ценю это!

0

Предполагая, что вы хотите функцию, которая перебирает элементы массива и выводит все ее содержимое, вот что я предлагаю:

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


void view(char *array[]){
    int i;
    for (i = 0; i < sizeof(array)/sizeof(char); i++){ 
        //sizeof(array)/sizeof(char) = length of any array          
        printf("\nElement -> %s",array[i]);
    }
}


int main() {

    char *arr[] = {"String One", "String Two", "String Three"};

    view(arr); //Calling the function

    return 0;
}