关于段异常的有关问题,求前辈解惑,非常感谢
关于段错误的问题,求前辈解惑,非常感谢
1.这段程序运行之后提示段错误,是什么意思?
我的本意是想输入一个 good 然后显示成功,如果输入别的字符则提示输入错误
要怎样才能得到这种效果?
2.还有一个问题,我本意是想用一个字符数组或者字符指针(字符串还不知道是个啥,如果能做到的话也可以)记录一串字符,相当于创建一个帐号,然后再运行这段代码,输入 good和储存的那串字符匹配,如果这串字符是一样的,那么就会提示成功,反之则失败。那么问题就是:
我要怎么记录那串字符,而且这串字符是随机的不知道有多长,如果是用字符数组的话,我该怎么设置循环的条件,使其输入完那串字符之后就立即停止循环?
我是刚开始学习C语言没两天的新手,这些问题或许看起来挺简单,但是我是真的想破头皮了,而且字符数组和指针那一块还不能完全理解,所以这两个问题希望能有前辈帮忙解答一下,非常感谢。
#include <stdio.h>
void main (){
char *zh="";
scanf("%c",zh);
if(zh = "good"){
printf("成功");
}
else{
printf("输入错误");
}
}
------解决方案--------------------
void main (){
char *zh=""; // 存放数组需要内存,但是这个zh只是一个指针
scanf("%c",zh);// %c是输入一个字符,不是一个字符串,用%s
if(zh = "good"){ 字符串比较用strcmp函数,‘=’是赋值不是比较
printf("成功");
}
else{
printf("输入错误");
}
}
楼主的C基础没有看到,建议再多看点基础,按照教程做几道基础的练习题,包括数组、字符串和指针
------解决方案--------------------
上面的例子参考下!
出现段错误是因为没有分配内存地址引起的!
------解决方案--------------------
这样说吧,在C++中,char *zh="";这个等价于const char *zh="";
为什么等价,是因为要兼容老代码,但最好现在写成这样。如果你知道const什么意思的话,就应该知道,这样写zh是一个只读的指针。是不允许更改内容的。
如果你强行修改,就会造成非法的地址访问,也就是段错误。如果一定要使用指针,最好先用malloc动态分配下,或者用数组的形式。总之这样写不好,误人误己。
刚开始学的话,最好多了解下标准和好的编程习惯,不然习惯了以后想改就很麻烦了。
楼上写的代码都可以,不过你看仔细了,如果你输入的内容,超过分配的长度同样会出错。
1.这段程序运行之后提示段错误,是什么意思?
我的本意是想输入一个 good 然后显示成功,如果输入别的字符则提示输入错误
要怎样才能得到这种效果?
2.还有一个问题,我本意是想用一个字符数组或者字符指针(字符串还不知道是个啥,如果能做到的话也可以)记录一串字符,相当于创建一个帐号,然后再运行这段代码,输入 good和储存的那串字符匹配,如果这串字符是一样的,那么就会提示成功,反之则失败。那么问题就是:
我要怎么记录那串字符,而且这串字符是随机的不知道有多长,如果是用字符数组的话,我该怎么设置循环的条件,使其输入完那串字符之后就立即停止循环?
我是刚开始学习C语言没两天的新手,这些问题或许看起来挺简单,但是我是真的想破头皮了,而且字符数组和指针那一块还不能完全理解,所以这两个问题希望能有前辈帮忙解答一下,非常感谢。
#include <stdio.h>
void main (){
char *zh="";
scanf("%c",zh);
if(zh = "good"){
printf("成功");
}
else{
printf("输入错误");
}
}
------解决方案--------------------
void main (){
char *zh=""; // 存放数组需要内存,但是这个zh只是一个指针
scanf("%c",zh);// %c是输入一个字符,不是一个字符串,用%s
if(zh = "good"){ 字符串比较用strcmp函数,‘=’是赋值不是比较
printf("成功");
}
else{
printf("输入错误");
}
}
楼主的C基础没有看到,建议再多看点基础,按照教程做几道基础的练习题,包括数组、字符串和指针
------解决方案--------------------
#include <stdio.h>
#include <string.h>
int main(void)
{
char buf[10] = {0};
if (scanf("%s", buf) == 1)
{
if(strcmp(buf,"good") == 0)
{
printf(" You are success!\n");
}
else
printf("You are failed!\n");
}
return 0;
}
上面的例子参考下!
出现段错误是因为没有分配内存地址引起的!
------解决方案--------------------
这样说吧,在C++中,char *zh="";这个等价于const char *zh="";
为什么等价,是因为要兼容老代码,但最好现在写成这样。如果你知道const什么意思的话,就应该知道,这样写zh是一个只读的指针。是不允许更改内容的。
如果你强行修改,就会造成非法的地址访问,也就是段错误。如果一定要使用指针,最好先用malloc动态分配下,或者用数组的形式。总之这样写不好,误人误己。
刚开始学的话,最好多了解下标准和好的编程习惯,不然习惯了以后想改就很麻烦了。
楼上写的代码都可以,不过你看仔细了,如果你输入的内容,超过分配的长度同样会出错。
#include <stdio.h>
int main (){
char *zh=0;
zh=(char *)malloc(sizeof(char)*20);//分配了20个空间
scanf("%s",zh);//%s是输入字符串,%c是单个字符
//scanf("%c",&zh); 这样用zh,应该是char类型,而不是char*
if(strcmp(zh,"good")==0){ //字符串要用strcmp比较,=表示赋值,不一样。
//如果zh是刚才说的char类型,应该用zh=='g',和单个字符比较
printf("成功");
}
else{
printf("输入错误");
}
return 0;
}