C语言问题,scanf和直接赋值的问题

#include "stdio.h"#include "string.h"void rever(char *p){ char *q; int c; q = p+strlen(p)-1;//q现在p的最后一位的地址 while(p<q){ c = *p;//放第I个字符 *p = *q;//第一位放最后一个字符 *q = c;//最后一位放第一个字符 p++; q--; }}int main(){ char *q ; scanf("%s",q);//如果这里是scanf传值,则编译不会出错 //q = "abcd";//如果是直接赋值,则编译出错 rever(q); printf("%s",q);}如上代码所示,当q直接用scanf传值的时候编译通过,如果直接赋值,编译失败,求助
代码用图片看吧,复制粘贴没有换行了

代码乱死了.大概看了一下.用char*来保存字符串必须得是在定义的时候给上值,如果不给,这就是一个字符指针.如果给了,那也只是给定了一个*只读*的字符串,所以在写代码的时候最好不要这样(除非有用)如果用了就要这样写:const char *p = "String";这样如果改动它的内容就会报错.
所以要用定义字符指针的方法去保存字符串,就得用malloc或new(C++)去动态申请内存空间.想知道更多的话,,,,把扣扣摞下吧,扣扣语音教.追问

thanks
917838566

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-11-07

好像是这样的,你测试一下:

(如果有问题请你追问我,或者咱俩私信联系,刚才费心费力帮另外一个人调试代码,结果他得到正确答案之后,就把采纳给了别人——对方写了一个错误代码,我郁闷了)

#include "stdio.h"
#include "string.h"

int rever(char *p){
    char *q;
    int c;
    q = p+strlen(p)-1;//q现在p的最后一位的地址
    while(p<q){
        c = *p;//放第I个字符
        *p = *q;//第一位放最后一个字符
        *q = c;//最后一位放第一个字符
        p++;
        q--;
    }
    return *q;
}

int main(){
    char *q ;
    scanf("%s",q);
    //如果这里是scanf传值,则编译不会出错
    //
    *q = 'a';//如果是直接赋值,则编译出错
    rever(q);
    printf("%s",q);
}

第2个回答  2014-11-07
q是一个指针变量,scanf()函数的第二个参数是一个指针,所以用scanf()函数是不会报错的。但是q = “abcd”, 是将一个字符常量数组直接赋值给一个指针变量是一定会报类型错误的!!你可以这样试试:char chArray[] = "abcd"; q = chArray; //或者q = &chArray; //再或者q = &chArray[0]; 这样让指针指向一个字符型的变量就行了!!

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网