我试图编写代码,提示用户输入字符串,然后打印字符串。然后,它将使用函数“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';
}

最佳答案

[]的优先级高于*,因此*firstString[x]被解析为*(firstString[x])。见C Operator Precedence
所以您需要编写(*firstString)[x]以获得正确的优先级。
此外,您的函数可以简单地编写为:

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

09-10 04:22
查看更多