C 如何修复:用户输入的字符串不能作为函数正常工作

C 如何修复:用户输入的字符串不能作为函数正常工作,c,C,我有一个成功编写的加密代码,询问用户是想要左移还是右移,以及他们想要移动多少。目标是让程序通过函数工作。我能够将代码的第一部分输入到函数中(学校编程练习),但我仍然无法获得用户输入。函数为getValidMessage();我知道我在主代码中正确地调用了它。我认为问题可能是null终止字符串,但我不知道出了什么问题 我有一行代码应该以null终止它,我认为我对原始代码做了足够的更改,它应该可以工作。但是,我不确定我是否在函数中正确实现了代码 // get message to encrypt /

我有一个成功编写的加密代码,询问用户是想要左移还是右移,以及他们想要移动多少。目标是让程序通过函数工作。我能够将代码的第一部分输入到函数中(学校编程练习),但我仍然无法获得用户输入。函数为getValidMessage();我知道我在主代码中正确地调用了它。我认为问题可能是null终止字符串,但我不知道出了什么问题

我有一行代码应该以null终止它,我认为我对原始代码做了足够的更改,它应该可以工作。但是,我不确定我是否在函数中正确实现了代码

// get message to encrypt
//This is called in the main function
char originalMessage[100];
getValidMessage(&originalMessage, sizeof(originalMessage));
int originalMessageLength = strnlen(originalMessage, 
sizeof(originalMessage));


//This is the function
/*
* Gets valid message from user
*/
void getValidMessage(char* message, int messageSize)
{
     char originalMessage[100];
     bool validMessage = false;
     printf("\n");
     printf("Enter message to be encrypted (upper case alphabetic 
     characters only): ");
     fgets(originalMessage, messageSize, stdin);
     int originalMessageLength = strnlen(originalMessage, 
     messageSize) - 1;
     while (!validMessage)
     {
         // invalid if non-upper case alpha characters in 
         // message (don't include newline at end))
         validMessage = true;
         for (int i = 0; i < originalMessageLength; i++)
         {
             if (!isupper(originalMessage[i]))
             {
                 printf("\n");
                 printf("Message must contain only upper "
                 "case alphabetic characters!\n");
                 printf("Enter message to be encrypted "
                 "(upper case alphabetic characters only):");
                 fgets(originalMessage, messageSize, stdin);
                 originalMessageLength = 
                 strnlen(originalMessage, messageSize) - 1;

                 // reset flag and exit for loop
                 validMessage = false;
                 break;
             }
         }
     }
     originalMessage[originalMessageLength] = '\0';
     return originalMessage;
}
//获取要加密的消息
//这是在main函数中调用的
char-originalMessage[100];
getValidMessage(&originalMessage,sizeof(originalMessage));
int originalMessageLength=strnlen(originalMessage,
sizeof(originalMessage));
//这就是函数
/*
*从用户处获取有效消息
*/
void getValidMessage(char*message,int messageSize)
{
char-originalMessage[100];
bool validMessage=false;
printf(“\n”);
printf(“输入要加密的消息(大写字母
仅限字符:“;”;
fgets(originalMessage、messageSize、stdin);
int originalMessageLength=strnlen(originalMessage,
消息大小)-1;
而(!validMessage)
{
//如果中包含非大写字母字符,则无效
//消息(末尾不包括换行符))
validMessage=true;
for(int i=0;i
我正在使用使用消息的运行测试代码。整个代码应该加密和解密代码以显示OGUUCIG,然后再次显示消息。目前,它只是显示了一堆奇怪的字符。
注意:这不是全部代码。它不显示加密或解密代码。我知道这样做很好,但我无法让它使用单独的函数而不是在代码主体中顺利工作。

类似于
&originalMessage
的东西是可疑的,特别是当
originalMessage
是数组时。
&originalMessage
的类型是
char(*)[100]
,这与
getValidMessage
所期望的类型有很大不同。请记住,数组自然衰减为指向其第一个元素的指针,即纯
originalMessage
等于
&originalMessage[0]
,这两者都属于
char*
类型。如何从声明为不返回任何内容的函数中
返回originalMessage
?在原始代码中,注释是否也分为两行?请不要在发布代码时手动换行,创建一个副本,然后按原样粘贴。请在缩进和格式化代码时更加小心,即我同意一些建议。我现在把它修好了,希望我没有弄坏任何东西;否则,请接受我的道歉,并修复我损坏的任何东西。嗨,蒂尔扎·布拉齐斯,我真的很想知道你到底是如何将代码复制到问题中的。累积缩进的奇怪方式和破坏语法的换行必须有复制这种方式的错误源。请理解我真的需要你的帮助。了解这是如何发生的将使我能够更好地帮助用户在未来遇到同样的问题。所以,请就你自己的问题写一条评论(你可以,你知道),其中包括“@Yunnosch”,并描述你所做的事情。我真的很感激,并尽我所能帮助他们。