我刚开始学习字符串,并且有一个关于使用指针参数向函数发送字符串数组的问题。我试图简单地打印阵列中的一个字符串,但我甚至不能这样做。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int stringSum(char *s);
/*void minMaxValues(char *s, int *min, int *max);*/
int main(void)
{
int value;
char* text[] = { "1 + 2 + 3 + 4",
"7",
"30 + 20 + 10",
"9 + 900 + 90000 + 9000 + 90" };
stringSum(&text);
}
int stringSum(char *s)
{
printf("%s\n",s[0]);
}
我在尝试编译时遇到一些名为segment fault的错误。我只是将字符串数组的地址传递给函数是不正确的?帮助将不胜感激
答案 0 :(得分:2)
将您的功能标题更改为:
int stringSum(char **s);
这允许您传递整个数组。您当前正在做的是将单个字符串传递给方法,然后仅打印第一个字符(s[0]
)。
也无需通过引用传递数组。只需stringSum(text);
即可。这是因为您希望将数组地址的值传递给方法。当您对其进行索引(使用s[0]
)时,您正在访问数组中第一个字符串的地址。
此外,请记住从stringSum
和main
返回一个值,但这与您的错误无关。
答案 1 :(得分:0)
两个问题:
将字符串数组的地址作为参数传递给函数。这应该给你一个很大的警告。
告诉printf
打印字符串,然后传递一个字符作为参数。这也应该给你一个很大的警告。
以上两个都导致undefined behavior。
要解决这些问题,首先必须使用单个字符串调用它,例如
stringSum(text[0]);
然后你必须打印字符串:
printf("%s\n", s);
要学习的经验:阅读警告并修复。警告通常是undefined behavior的指示符,在许多情况下会导致程序崩溃,例如分段错误。