0
#include<stdio.h>
int main()
{
    char *ch;
    int n=10;
    gets(ch);
    puts(ch);
    printf("%d\n",n);

}   

#include<stdio.h>
int main()
{
    char *ch;
    int n=10;
    gets(ch);
    printf("%d\n",n);
    puts(ch);

}   

在第一个中,分段错误发生在 print(n) 处,而在第二个中,它发生在 puts(ch) 处。如果在声明 n 之后也使用了 print(n),则不会发生错误。

4

3 回答 3

7

gets()正在取消引用一个未初始化的指针,导致未定义的行为

ch为和不使用分配内存,因为无法gets()限制读取的字符数,这意味着可能会超出目标数组的范围。

使用示例fgets()

char ch[128];
if (fgets(ch, 128, stdin))
{
}
于 2013-06-25T20:13:21.800 回答
1

使用 fgets 并为您的“缓冲区”(通过 malloc)分配内存以保存给定的字符串。最后免费为您的指针打电话。

于 2013-06-25T20:14:06.037 回答
0
#include<stdio.h>
#include<stdlib.h>
    int main(){
        char * ch = (char*) malloc(sizeof(char)*10);
        //or by using this: char ch[10];
        int n=10;
        gets(ch);
        puts(ch);
        printf("%d\n", n);
        free(ch);
}
于 2013-06-26T02:42:31.830 回答