使用指针更改函数中数组值的麻烦

时间:2016-04-25 12:18:08

标签: c arrays function pointers parameters

我正在尝试编写将提示用户输入字符串的代码,然后打印字符串。然后它将使用函数'initialize'将数组中的每个值更改为'a',除了最后一个值,它将更改为'\ 0'。然后调用函数将打印更新的字符串。

这是我的代码:

#include <stdio.h>
#include <string.h>

void initialize(char (*firstString)[50]);

void main(void)
{
   char firstString[50];

    printf("Enter a string: ");
    scanf("%s", firstString);
    printf("%s", firstString);
    initialize(&firstString);
    printf("%s", firstString);
}

void
initialize(char (*firstString)[50])
{
    int i;
    for (i = 0; i < 50; i++) {
        *firstString[i] = 'a';
        *firstString[49] = '\0';
    }
}

感谢任何帮助。

编辑:

这是工作代码。谢谢你的帮助!

#include <stdio.h>
#include <string.h>

void initialize(char firstString[50]);

void main(void)
{
   char firstString[50];

    printf("Enter a string: ");
    scanf("%s", firstString);
    printf("%s", firstString);
    initialize(firstString);
    printf("%s", firstString);
}

void
initialize(char firstString[50])
{
    int i;
    for (i = 0; i < 50; i++)
        memset(firstString, 'a', 49);
    firstString[49] = '\0';
}

1 个答案:

答案 0 :(得分:2)

[]的优先级高于*,因此*firstString[x]会被解析为*(firstString[x])。请参阅C Operator Precedence

因此,您需要编写(*firstString)[x]以获得正确的优先级。

此外,您的功能可以简单地写为:

void
initialize(char (*firstString)[50])
{
    memset(firstString, 'a', 49);
    (*firstString)[49] = '\0';
}