在C程序中使用printf进行printng时,我的char字符串中添加了未定义的行为多余的符号

问题描述

我写了这个程序是为了帮助别人和作为学习练习,但是现在我对为什么奇怪的增加感到困惑。非常感谢帮助

#include <stdio.h>
#include <ctype.h>

typedef struct
{
    char str[1000];
} arrType;

typedef struct
{
    char *str;
} ptrType;

ptrType message = {"start"};

int main()
{
    int choice;
    int i;
    char temp;
    char begmessage[1000];
    char endmessage[1000];
    printf("Would you like to (1) encrypt or (2) decrypt?: ");
    scanf("%i",&choice);
    scanf("%c",&temp); // temp statement to clear buffer
    printf("You chose: %d\n",choice);
    printf("Type your message: ");
    scanf("%[^\n]",begmessage);
    ptrType message = {begmessage};
    printf("\nThe message you typed is %s \n",message.str);
    if (choice == 1) 
    {
        for (i = 0; (i < 1000 && message.str[i] != '\0');) 
        {
            if (isalnum(message.str[i])) 
            {
                endmessage[i] = putchar((message.str[i] + 1));
                i +=1;
            } 
            else 
            {
                endmessage[i] = putchar((message.str[i])); i +=1;
            }
        }
    printf("\nYour message is Now: %s\n",endmessage);
    }
    if (choice == 2) {
        for (i = 0; (i < 1000 && message.str[i] != '\0');) 
        {
            if (isalnum(message.str[i])) 
            {
                endmessage[i] = putchar((message.str[i] - 1));
                i +=1;
            } 
            else 
            {
                endmessage[i] = putchar((message.str[i])); i +=1;
            }
        }
    printf("\nYour message is Now: %s\n",endmessage);

    } 

}

以下是输出

您要(1)加密还是(2)解密?:1您选择了:1类型 您的讯息:高塔

您键入的消息是High Tower Ijhi Upxfs您的消息现在是: Ijhi Upxfss。

您要(1)加密还是(2)解密?:2您选择了:2类型 您的消息:Ijhi Upxfs

您键入的消息是Ijhi Upxfs High Tower您的消息是: 高塔。

这行“高塔”来自哪里? 在最后一行,``����''来自哪里。我在stackoverflow和互联网上进行了搜索,但是符号``无法识别...

再次运行该程序并获得类似结果:

您要(1)加密还是(2)解密?:1 您选择了:1 输入您的信息:高塔

您键入的消息是High Tower Ijhi Upxfs您的消息现在是: Ijhi Upxfs。;

您要(1)加密还是(2)解密?:2您选择了:2类型 您的消息:Ijhi Upxfs

您键入的消息是Ijhi Upxfs High Tower您的消息是: 高塔@

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)