为什么我的代码打印输出包含超过10个字符的输入文本?

时间:2015-12-27 17:57:35

标签: c

#include<stdio.h>
main() {
char ch,a[10];
int i=0;
printf("enter text,press <return> to end!\n");
while(ch!='\n') {
ch=getchar();
a[i]=ch;
i++;
}
i=i-1;
a[i]='\0';
printf("%s",a);
}

这里我声明了一个最大大小为10的数组'a'。我使用while循环读取字符并将它们放在数组'a'中,最后代码打印出我输入的文本

2 个答案:

答案 0 :(得分:3)

我已经完成了对此版本的更多检查。

12-27 18:53:50.905: E/MediaPlayer(15688): internal/external state mismatch corrected
12-27 18:53:50.915: E/MediaPlayer(15688): error (100, 0)
12-27 18:53:51.385: E/AndroidRuntime(15688): FATAL EXCEPTION: main
12-27 18:53:51.385: E/AndroidRuntime(15688): Process: com.example.gent3, PID: 15688
12-27 18:53:51.385: E/AndroidRuntime(15688): java.lang.RuntimeException: failure code: -32
12-27 18:53:51.385: E/AndroidRuntime(15688):    at android.media.MediaPlayer.invoke(MediaPlayer.java:710)
12-27 18:53:51.385: E/AndroidRuntime(15688):    at android.media.MediaPlayer.selectOrDeselectInbandTrack(MediaPlayer.java:3067)
12-27 18:53:51.385: E/AndroidRuntime(15688):    at android.media.MediaPlayer.selectOrDeselectTrack(MediaPlayer.java:3056)
12-27 18:53:51.385: E/AndroidRuntime(15688):    at android.media.MediaPlayer.selectTrack(MediaPlayer.java:3014)
12-27 18:53:51.385: E/AndroidRuntime(15688):    at com.example.gent3.TV$18.onClick(TV.java:1640)
12-27 18:53:51.385: E/AndroidRuntime(15688):    at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166)

答案 1 :(得分:0)

这是非常不安全的,因为你有一个静态声明的10 char个数组。如果用户输入第11个char,您将遇到缓冲区溢出。您也应该检查i中的while

while(ch!='\n' && i < 9) {
ch=getchar();
a[i]=ch;
i++;
}
a[i]='\0';
printf("%s",a);