在C中的函数中打印数组中的字符串

时间:2016-05-14 09:12:27

标签: c arrays string

我的主要功能中的开关4的情况一直发生崩溃,无法修复它。

我会解释一下代码,希望你们能帮助我:

初始化功能

void function1(char[]);

声明字符串数组

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

循环遍历main函数中的字符串数组(这正常,它会打印字符串数组)

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

切换功能中的代码(仍在主函数中)

case 4:
            function1(my_array);
            break;

我已经测试过并且所有以前的代码都能正常工作,问题出在这里(在main函数之外):

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

当我执行开关的情况4时,它会崩溃。

日志给出的2警告:

  

警告:从不兼容的指针传递'function1'的参数1   型

     

警告:格式'%s'需要类型为'char *'的参数,但参数为2   类型'int'[-Wformat =]

很抱歉,如果解释有点不清楚,我尽可能地努力让它变得容易理解。

我真的希望你们能帮助我,谢谢!!

4 个答案:

答案 0 :(得分:9)

第一个警告,即

  

警告:传递&#39; function1&#39;的参数1来自不兼容的指针类型

讲述了这个故事:你传递了一个字符指针数组,但是函数声明说它需要一个简单的字符指针。

第二个警告从函数内部告诉你同样的事情:

  

警告:格式&#39;%s&#39;期望类型&#39; char *&#39;的参数,但参数2的类型为&#39; int&#39; [-Wformat =]

格式需要一个C字符串,但是你要传递一个char *

您需要做的就是在function1的声明中添加一个缺少的星号:

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

在您访问时,请添加const以匹配my_arraymain的声明。

* 编译器说您传递的是int,而不是char,因为printf需要可变数量的参数,因此编译器应用某些转换函数的论点。其中一种转变是将所有char提升为int s。

答案 1 :(得分:1)

请仔细查看功能减速

  

void function1(char my_array [])

你传入的char数组是字符串(显然你不想要)。第二个问题是这一行,

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

当您说my_array [i]时,您正试图访问字符,并且在&#39; i&#39;位置并使用%s打印一个字符(这是一个崩溃)。要打印一个角色,你应该写这个

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

现在让我们根据你的要求修复代码,你应该有一个带有char指针数组的函数(OR string)

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");
}

请注意使用&#39; const&#39; (如果您只需要读取/打印字符串数组中的数据)。请考虑发送数组的大小并使用该大小迭代循环。

{{1}}

答案 2 :(得分:1)

好的我们已经尝试了所有的解决方案,当我添加&#34; const&#34;在函数中,它给出了一个错误&#34;冲突类型中的错误&#34;。

阅读所有人我发现我只传递函数中的一个字符而不是一串字符(函数和函数的初始化中缺少*)。

我改变了这个:

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");
}

它就像一个魅力!

很抱歉,如果这是一个noob问题,但我从C编程开始。

谢谢大家的回答,我很感激!

答案 3 :(得分: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;
}