使用指针在函数中更改数组值的问题

问题描述:

我正在尝试编写将提示用户输入字符串的代码,然后打印该字符串。然后它将使用函数'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

你应该得到与-Wall -Wextra一个警告,告诉你问题是什么。 – 2501

+0

* * firstString [i]'和优先级.... –

+0

* firstSring [i]是一个**指针,仅使用1个指针 – Schafwolle

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

因此,您需要编写(*firstString)[x]才能获得正确的优先顺序。

而且,你的函数可以简单地写成:

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