gpt4 book ai didi

arrays - 在函数中使用字符串数组

转载 作者:行者123 更新时间:2023-12-04 17:07:26 24 4
gpt4 key购买 nike

我正在练习字符串数组,但似乎我不明白它是如何工作的,有人可以向我解释什么是制定此代码的正确方法吗?

代码目标:将 2 个字符串分配给字符串数组并使用函数打印它们。

错误:编译器没有发现任何错误,但我只是没有在终端中得到任何输出。

#include <stdio.h>

#define MAX 100

void function(char **);

int main()
{
char *a[MAX]; /*array of max 100 strings*/
a[0] = "test0";
function(&a[MAX]);
return 0;
}

void function(char *a[MAX])
{
a[1] = "test1";
printf("%s",*a[1]);
printf("%s",*a[0]);
}

最佳答案

The compiler doesn't find any error, but i simply don't get any output in the terminal.

那是因为您传递的地址不是您的函数所期望的。

function(&a[MAX]);

您正在传递数组 a 中索引 MAX 处的项目地址,但您的函数将其解释为整个数组的地址。你应该改为写:

function(a)

您似乎混淆了参数的声明方式和它在函数调用中的使用方式。当你声明一个函数时,你必须指定参数的类型,所以你说例如char *s[] 表示指向字符的指针数组。但是当你调用一个函数时,编译器已经知道函数期望的类型,所以你只需要传递一个与声明的类型相匹配的变量。此上下文中的方括号,如 a[MAX],被解释为选择数组中一个元素的下标。

旁白:就风格而言,function 是一个糟糕的函数名称。我知道这只是一个很小的测试程序,所以没什么大不了的,但要养成给事物起描述性名称的习惯。

还有:

printf("%s",*a[1]);
printf("%s",*a[0]);

此处您正在访问索引 1 处的项目,但您尚未在此处存储任何内容。这不是一个好计划。要么删除第一行,要么更改代码以在索引 1 中存储一些内容。

此外,您不需要取消引用元素。数组中的每个元素都是一个字符数组,printf() 将期望一个 char * 类型的值,这就是每个 a[n] 将是。所以只需使用:

printf("%s", a[1]);
printf("%s", a[0]);

关于arrays - 在函数中使用字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70292577/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com