使用指针在函数中更改数组值的问题
问题描述:
我正在尝试编写将提示用户输入字符串的代码,然后打印该字符串。然后它将使用函数'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';
}
你应该得到与-Wall -Wextra一个警告,告诉你问题是什么。 – 2501
* * firstString [i]'和优先级.... –
* firstSring [i]是一个**指针,仅使用1个指针 – Schafwolle