标题:关于指针、 strcpy函数
只看楼主
taomei006
Rank: 1
来 自:安徽铜陵学院
等 级:新手上路
帖 子:52
专家分:0
注 册:2009-9-11
结帖率:50%
 问题点数:0 回复次数:10 
关于指针、 strcpy函数
请问该程序段的运行结果是:
char *p="abcdefgh";
    p+=3;
    printf("%d\n",strlen(strcpy(p,"ABCD")));

哪位高手,帮忙解释一下
搜索更多相关主题的帖子: 指针 函数 strcpy 
2010-03-15 20:42
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
得分:0 
strcpy(p,"ABCD"))); 这个可以这样用么
2010-03-15 20:57
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
得分:0 
f.exe 中的 0x1026f689 (msvcr90d.dll) 处未处理的异常: 0xC0000005: 写入位置 0x0041580f 时发生访问冲突
main_loop:                          ; edx contains first dword of sorc string
        mov     [edi],edx           ; store one more dword
        add     edi,4               ; kick dest pointer
main_loop_entrance:
        mov     edx,7efefeffh
        mov     eax,dword ptr [ecx] ; read 4 bytes

        add     edx,eax
        xor     eax,-1


我运行不过去
2010-03-15 20:59
taomei006
Rank: 1
来 自:安徽铜陵学院
等 级:新手上路
帖 子:52
专家分:0
注 册:2009-9-11
得分:0 
回复 2楼 hahayezhe
这是一张试卷上的题目,我也搞不懂啊。
2010-03-15 21:00
taomei006
Rank: 1
来 自:安徽铜陵学院
等 级:新手上路
帖 子:52
专家分:0
注 册:2009-9-11
得分:0 
回复 3楼 hahayezhe
我也运行了,"0x00401221"指令 。。。该内存不能为written。
那你能改正一下这个程序吗,使得字符串长度为“ABCD”的长度=4
2010-03-15 21:04
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
得分:0 
#include "stdafx.h"
#include "string"
#include "ctype.h"
//#include "iostream"
//using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    char *p="abcdefgh";
    p+=3;
    printf("%d\n",strlen(strcpy(p,"ABCD")));
    return 0;
}错的
2010-03-15 21:08
taomei006
Rank: 1
来 自:安徽铜陵学院
等 级:新手上路
帖 子:52
专家分:0
注 册:2009-9-11
得分:0 
回复 6楼 hahayezhe
好复杂 好纠结
2010-03-15 21:11
邮贼
Rank: 2
等 级:论坛游民
帖 子:17
专家分:36
注 册:2010-3-5
得分:0 
我的观点是你前面给指针赋值时,是赋的字符串常量,后面当然改不了!常量是只读的,你试图改变当然会出错。。。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void main()
{
    char *p;
    p=malloc(sizeof(char)*20);
    strcpy(p,"abcdefgh");

    strcpy(p,"ABCD");

    printf("%d\n",strlen(p));
    free(p);

}
这样就差不多了

[ 本帖最后由 邮贼 于 2010-3-15 22:44 编辑 ]
2010-03-15 22:32
李若斌
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:219
专家分:184
注 册:2009-9-30
得分:0 
直接答案是不是   ABCDh
char *p="abcdefgh";/* 指针指向字符串首地址 取地址元素的话就是 *p=a
    p+=3; /*自加三后 指向元素下标为三的元素地址 取地址元素是 *p=d
    printf("%d\n",strlen(strcpy(p,"ABCD"))); 复制字符串到P指针指向的字符串中。覆盖原来的元素defg为ABCDh
在这里应该要提醒下搂主是不是写错了??
输出一个带符号的十进制数%d????
字符串还能直接输出成了整数???是不是要写成printf("%s\n",strlen(strcpy(p,"ABCD")));
2010-03-15 23:28
psv
Rank: 2
等 级:论坛游民
帖 子:21
专家分:54
注 册:2010-3-3
得分:0 
strlen(strcpy(p,"ABCD")));

==》  8 楼 正解   ,尝试改变只读数据区的数据是违规的,可以通过编译器GCC反汇编下看到指针P指向的数据时存储在只读存储区的
==》  将P改成数组就完全可以(在不越界的情况下),指针和数组是不能画等号的,只是在某些情况下可以由编译器进行自动的转换

[ 本帖最后由 psv 于 2010-3-16 15:52 编辑 ]
2010-03-16 15:47



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




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

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