简体   繁体   English

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

[英]Trouble with changing value of array in function using pointer

I am trying to write code that will prompt the user for a string, and then print the string. 我正在尝试编写将提示用户输入字符串的代码,然后打印该字符串。 It will then use the function 'initialize' to change every value in the array to 'a' except the last value, which will be changed to '\\0'. 然后它将使用函数“初始化”将数组中的每个值更改为“ a”,最后一个值除外,该值将更改为“ \\ 0”。 The calling function will then print the updated string. 然后,调用函数将打印更新的字符串。

Here is the code I have: 这是我的代码:

#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';
    }
}

Any help is appreciated. 任何帮助表示赞赏。

EDIT: 编辑:

Here is the working code. 这是工作代码。 Thanks for the help! 谢谢您的帮助!

#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';
}

[] has higher precedence than * so *firstString[x] is parsed as *(firstString[x]) . []优先级比*因此*firstString[x]被解析为*(firstString[x]) See C Operator Precedence . 请参阅C运算符优先级

So you need to write (*firstString)[x] to get the correct precedence. 因此,您需要编写(*firstString)[x]以获得正确的优先级。

Also, your function could be written simply as: 另外,您的函数可以简单地写为:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM