首页 > 解决方案 > C中的字符串数组和函数的问题

问题描述

我刚从 C 开始,我试图让一个由 3 个字符串组成的数组通过一个函数。但是,在该函数中,只剩下 1 个字符串,看起来甚至没有数组。我已经尝试了很多东西,但我似乎无法修复它。

#include <stdio.h>
#define NUM_WORDS 3
#define MAX_WORD_SIZE 64

void printStrings(char words[])
{
    //But now 'words' looks like this: "one"  
    for (int i = 0; i < NUM_WORDS; ++i)
        printf("%s", words[i]);
}

void main()
{
    char words[NUM_WORDS][MAX_WORD_SIZE] = { "one", "two", "three" };
    //At this point the array 'words' looks like this:  
    //{ "one", "two", "three" }
    printStrings(words);
}

标签: carraysfunctionc-strings

解决方案


您对wordsinside of的声明main是正确的,但是要将二维数组传递给函数,您需要在函数中声明它。您当前的声明printWords仅将其参数声明为一维字符数组,这解释了为什么它不能正常工作。

正确声明此要求的最低要求如下:

void printStrings(char words[][MAX_WORD_SIZE])

但是,在这种情况下,您可以选择这样做:

void printStrings(char words[NUM_WORDS][MAX_WORD_SIZE])

这样做的优点(和缺点)意味着对可以/应该交给 printWords 的内容有更大的限制。这有点类似于以下之间的区别:

void function(char foo[])

它采用任意大小的字符数组,并且

void function(char foo[FOO_SIZE])

这表明它需要一个数组FOO_SIZE,既不大也不小。

请注意,您只能省略最外面(最左边)的维度,内部维度是必需的,因此编译器知道每个外部元素的最终大小。


推荐阅读