c - 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);
}
解决方案
您对words
inside 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
,既不大也不小。
请注意,您只能省略最外面(最左边)的维度,内部维度是必需的,因此编译器知道每个外部元素的最终大小。
推荐阅读
- database - 为什么数据被两次添加到同一个表中?
- c# - 错误 CS0246:找不到类型或命名空间名称“节点”(您是否缺少 using 指令或程序集引用?)
- r - 为什么来自 shinycssloaders 的 R Shiny Loading Spinner 没有出现
- android-studio - 对 recyclerview 和 imageview 大小感到困惑
- javascript - 使用地址栏获取页面高度?
- ruby-on-rails - Rails 检查 Time.zone.now 是否在 2 个记录时间之间
- tensorflow - tf.data.Dataset 的 Efficientnet inputshape 错误
- java - Map函数Map中泛型的区别
- mysql - UNIX时间戳时差平均MYSQL
- vba - 如果 Visible 设置为 False,MS Access Web 浏览器控件不会在 VBA 中加载 HTML 内容