标题:为何用字符串指针代替数组出现错误(见main()函数)
只看楼主
wangfangjin
Rank: 1
等 级:新手上路
帖 子:29
专家分:5
注 册:2010-7-13
结帖率:80%
已结贴  问题点数:20 回复次数:9 
为何用字符串指针代替数组出现错误(见main()函数)
#include <stdio.h>

/*
**翻转参数字符串
*/
void
reverse_string(char*str)
{
    char *last_char=NULL;
    /*
    **把last_char设置为指向字符串的最后一个字符
    */
    for(last_char=str;*last_char!='\0';last_char++)
        ;
    last_char--;
    /*
    **交换str和last_char指向的字符串,然后str前进一步,last_char
    后退一步,在两个指针相遇或擦肩而过之前重复这个过程。
    */

    while(str<last_char)
    {
        char temp=NULL;
        temp=*str;
        *str++=*last_char;
        *last_char--=temp;
    }
}

int
main()
{
    char aStr[]="asdfgh";//为什么用char *aStr="asdfgh";,编译错误

    reverse_string(aStr);
    printf("%s\n",aStr);
    return 0;
}
搜索更多相关主题的帖子: 代替 字符 函数 指针 main 
2010-09-11 10:10
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
得分:0 
没出错啊!我用的vc不知道楼主用的什么
程序代码:
--------------------Configuration: 字符指针 - Win32 Debug--------------------
Compiling...
字符指针.c
F:\c\网上答疑\字符指针.c(23) : warning C4047: 'initializing' : 'char ' differs in levels of indirection from 'void *'

字符指针.obj - 0 error(s), 0 warning(s)
这是编译结果!就一警告!连接也没错

[ 本帖最后由 遮天云 于 2010-9-11 10:17 编辑 ]
2010-09-11 10:15
encounter
Rank: 5Rank: 5
来 自:扬州
等 级:职业侠客
威 望:2
帖 子:150
专家分:359
注 册:2010-7-24
得分:0 
char aStr[]="asdfgh";//为什么用char *aStr="asdfgh";,编译错误

astr是常量
*aStr指针变量的值会变化

  printf("%s\n",aStr);
这儿会出问题

ping   nbtstat   netstat   tracert    nat   at    ftp   telnet..................
2010-09-11 10:55
自由战士89
Rank: 5Rank: 5
等 级:职业侠客
帖 子:154
专家分:387
注 册:2010-9-2
得分:0 
我也用的VC,确实是错的。不清楚为什么。
我感觉三楼说的不对。请高手解答。
2010-09-11 11:20
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
得分:0 
以下是引用自由战士89在2010-9-11 11:20:30的发言:

我也用的VC,确实是错的。不清楚为什么。
我感觉三楼说的不对。请高手解答。
怪事了!怎么你用VC报错了啊!邪门了!
2010-09-11 11:24
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
得分:0 
高手在那里?
没有高手在,所以菜鸟露头猜测!
 char aStr[]="asdfgh";//为什么用char *aStr="asdfgh"
一个数组名 一个指针,区别?错误?
有错误吗?
有错误的话你将char *aStr="asdfgh";写到最上面最为全局看看还有吗?
要是还有的话,就说明与编译器处理函数时所采用的调用约定有关了
其他的不知道了!
2010-09-11 11:34
wangfangjin
Rank: 1
等 级:新手上路
帖 子:29
专家分:5
注 册:2010-7-13
得分:0 
回复 2楼 遮天云
VS2005 提示内存读错误

[ 本帖最后由 wangfangjin 于 2010-9-11 12:18 编辑 ]
2010-09-11 12:11
自由战士89
Rank: 5Rank: 5
等 级:职业侠客
帖 子:154
专家分:387
注 册:2010-9-2
得分:0 
以下是引用hahayezhe在2010-9-11 11:34:55的发言:

高手在那里?
没有高手在,所以菜鸟露头猜测!
 char aStr[]="asdfgh";//为什么用char *aStr="asdfgh"
一个数组名 一个指针,区别?错误?
有错误吗?
有错误的话你将char *aStr="asdfgh";写到最上面最为全局看看还有吗?
要是还有的话,就说明与编译器处理函数时所采用的调用约定有关了
其他的不知道了!
还有错误
2010-09-11 13:23
Windy0Winll
Rank: 2
来 自:走了
等 级:等待验证会员
帖 子:71
专家分:90
注 册:2010-8-26
得分:20 
首先说下这一句: char temp=NULL;
一般C语言中NULL表示的是空指针,而您的temp并不是指针,虽然这样没错,但还是要尽量避免。

----char aStr[]="asdfgh";//为什么用char *aStr="asdfgh";,编译错误----
如果改成char *aStr="asdfgh",不会是编译错误吧,应该是运行错误吧?
为什么会有运行错误呢?
char *aStr="asdfgh",这样定义的指针是指向一个字符串常量的首地址。存放常量的空间并不是和普通的一样,它有专门的空间,并且这些空间是只读,不能写的。调用reverse_string(aStr)时,明显要对aStr指向的空间进行写操作,当然这就会产生错误了,和使用空指针对象是一个道理。

其实字符串常量也可以理解成一个字符数组,只不过它的名字就是它本身。因此我们可以这样写 char *p;p="asdfgh"/*这个时候我们可以把"asdfgh"看成一个数组名*/;我们还可以写成这样char ch = "asdfgh"[2]/*相当于ch='d'*/;

悄悄地来。。。 然后悄悄地走。。。。。。
2010-09-11 14:21
wangfangjin
Rank: 1
等 级:新手上路
帖 子:29
专家分:5
注 册:2010-7-13
得分:0 
回复 9楼 Windy0Winll
“存放常量的空间并不是和普通的一样,它有专门的空间,并且这些空间是只读,不能写的”,这个我真不知道,谢谢您的指点!
我对字符数组和用指针指向一个常量字符串一直不是很懂....
2010-09-11 18:45



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-320105-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.083257 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved