我想编写一个程序,该程序将用户输入的消息转换为b1ff-Speac。但是,该程序似乎在这里崩溃:
#define MAX_LEN 80
char message[MAX_LEN];
printf("Enter a message: ");
for (int i = 0; i < MAX_LEN - 1; i++)
scanf("%c", message[i]);
for (int i = 0; i < MAX_LEN - 1; i++)
printf("%c", message[i]);
错误在哪里?我似乎找不到它。我想理解为什么这条特定的代码崩溃了我的程序。
预先感谢。
您需要在scanf语句中添加一个andand。
scanf("%c", &message[i]);
问题在于,您应该将指针传递给 scanf 。通常,您通过数组(是指针)或char-pointer(字符串)。您正在做的是通过炭本身。该方法没有可能在char中写入某些内容,因为它是在函数调用之前复制的。
发生的事情是该方法将非初始化的字符解释为地址,并试图写入最有可能失败的随机位置。
只需传递char的地址:
char message[MAX_LEN];
printf("Enter a message: ");
for (int i = 0; i < MAX_LEN - 1; i++)
scanf("%c", &message[i]);
for (int i = 0; i < MAX_LEN - 1; i++)
printf("%c", message[i]);
您需要将地址传递给scanf:
scanf("%c", &message[i]);