C:让用户一个字符一个字符地填充一个char数组。然后打印

时间:2019-03-03 12:19:11

标签: c arrays

我想编写一个程序,将用户输入的消息翻译成B1FF语音。但是,该程序似乎在此处崩溃:

#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]);

错误在哪里?我似乎找不到。 我想了解为什么这段特定的代码会使我的程序崩溃。

谢谢。

3 个答案:

答案 0 :(得分:1)

您需要在scanf语句中添加一个&符。

Given: [(10, 12), (12, 37)] 
Output: [(0,10),(37,48)]


Given: [(9, 15)] 
Output: [(0,9),(15,48)]


Given: [(0, 15), (15, 17), (17, 19), (21,25)] 
Output: [(19,21),(25,48)]


Given: [(23, 35),(40,47)] 
Output: [(0,23),(35,40),(47,48)]

答案 1 :(得分:0)

您需要将地址传递给scanf:

scanf("%c", &message[i]);

答案 2 :(得分:0)

问题在于,您应该将指针传递给 scanf 。 通常,您传递一个数组(它是一个指针)或一个字符指针(字符串)。您正在做的是传递char本身。该方法无法将某些内容写入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]);