指向字符串数组的字符串的参数?

时间:2014-07-01 18:51:49

标签: c function pointers parameters

我刚开始学习字符串,并且有一个关于使用指针参数向函数发送字符串数组的问题。我试图简单地打印阵列中的一个字符串,但我甚至不能这样做。

#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的错误。我只是将字符串数组的地址传递给函数是不正确的?帮助将不胜感激

2 个答案:

答案 0 :(得分:2)

将您的功能标题更改为:

int stringSum(char **s);

这允许您传递整个数组。您当前正在做的是将单个字符串传递给方法,然后仅打印第一个字符(s[0])。

也无需通过引用传递数组。只需stringSum(text);即可。这是因为您希望将数组地址的传递给方法。当您对其进行索引(使用s[0])时,您正在访问数组中第一个字符串的地址。


此外,请记住从stringSummain返回一个值,但这与您的错误无关。

答案 1 :(得分:0)

两个问题:

  1. 将字符串数组的地址作为参数传递给函数。这应该给你一个很大的警告。

  2. 告诉printf打印字符串,然后传递一个字符作为参数。这也应该给你一个很大的警告。

  3. 以上两个都导致undefined behavior

    要解决这些问题,首先必须使用单个字符串调用它,例如

    stringSum(text[0]);
    

    然后你必须打印字符串:

    printf("%s\n", s);
    

    要学习的经验:阅读警告并修复。警告通常是undefined behavior的指示符,在许多情况下会导致程序崩溃,例如分段错误。