首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 字符数组和字符型指针问题 [已结帖,结帖人:liln0530]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liln0530
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-08-19 18:04:54 楼主
    C/C++ code
    #include <stdio.h> char *_strcpy(char *dest, char *src) { char *temp = dest; for(; *src != '\0'; src++) { *dest = *src; dest++; } *dest = '\0'; return temp; } int main (int argc, const char * argv[]) { // 程序1 char src[] = "ABCDEF................."; char dest[2] = "11"; // /* 程序2 char *src = "ABCDEF................."; char *dest = "11"; 如果用程序2,执行有误,请问下原因 */ char *p = _strcpy(dest, src); printf("%s", p); return 0; }
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • clhposs
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 18:10:441楼 得分:2
    char dest[2] = "11"  这里要3  '\0'占一个
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lovexieli
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 18:47:142楼 得分:2
    C/C++ code
    /* 程序2 char *src = "ABCDEF................."; char *dest = "11"; 如果用程序2,执行有误,请问下原因 */


    要知道char *src
    是在定义指针啊!他需要的是地址,不是内容啊!

    可以
    C/C++ code
    char src1="ABCDEF................."; char *src=NULL; scr=&scr1;


    程序一,是使用的数组,就不出现问题。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lovexieli
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 18:52:153楼 得分:2
    不好意思错了!

    C/C++ code
    char[color=#FF0000] src1[/color]="ABCDEF.................";//应该使用数组。 char *src=NULL; scr=&scr1;


    PS:声明/定义*变量名,只是定义了他为指针。没有指向他的存储空间。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • k2eats
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 18:54:024楼 得分:2
    其一、char[3]="11";
    其二、char *dest = "11";是常量字符串,不可写,相当于const char*dest = "11";保存在常量区,应该使用数组的形式
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • realdragon2
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 19:46:335楼 得分:2
    char *dest没有空间可用, 它原先指向的字符串常量位于常量区,不可写.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lunarfan
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 20:05:056楼 得分:2
    char *dest = "11";
    "11"内容不能被改写
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lbh2001
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 09:13:427楼 得分:2
    引用楼主 liln0530 的帖子:
    C/C++ code
    #include <stdio.h>

    char *_strcpy(char *dest,  char *src)
    {
        char *temp = dest;

        for(; *src != '\0'; src++)
        { 
            *dest = *src;
            dest++;
        }
        *dest = '\0';

        return temp;
    }

    int main (int argc, const char * argv[])
    {

    // 程序1  --------------->src,dest分配在栈中,所以dest可以改变
            char src[] = "ABCDEF.................";
        char dest[2] = "11";
    //

    /*    程序2  --------------->src,dest分配只读全局区域中,所以dest不能改变
        char *sr…
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • stormlk1983
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 10:12:398楼 得分:2
    char[3]="11";


    char *src = "ABCDEF.................";这样定义后src指向的是一个常量区,

    所以在har *_strcpy(char *dest,  char *src)里,src++是错误的

    原理就象 char str[] = "1234";char* p;
    可以执行str[0] = ‘6’;而不能够用*p = 6 一样
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ww2734
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 10:16:189楼 得分:0
    引用 4 楼 k2eats 的回复:
    其一、char[3]="11";
    其二、char *dest = "11";是常量字符串,不可写,相当于const char*dest = "11";保存在常量区,应该使用数组的形式

    同意!
    指针指向常量,该指针内容可读取,但是不能更改.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • stormlk1983
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 10:16:4010楼 得分:1
    原理就象 char str[] = "1234";char* p;
    可以执行str[0] = ‘6’;而不能够用p[0] = 6 一样
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • taojian_hhu
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 10:21:2511楼 得分:0
    对于程序2的_strcpy(dest, src)来说,你试图将一个常量值赋给另一个常量,当然是不行的。char* dest="11",dest是一个无法修改其值的变量
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cang0lang
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 10:37:0612楼 得分:1
    // 程序1
    程序1是数组的初始化赋值 没有问题

    /*    程序2
        char *src = "ABCDEF.................";
        char *dest = "11";
    */
    程序2中是定义的2个char型的指针,你可以让指针指向某个地址,
      但是"ABCD..."  和"11" 是常量,位于静态存储区,内容为11\0,常量字符串的内容是不可以被修改的,从语法上看,编译器并不觉得语句dest[0]='s'有什么不妥,但是该语句企图修改常量字符串的内容而导致运行错误 
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xianyuxiaoqiang
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 10:49:3913楼 得分:0
    貌似楼主用数组有越界问题.源字符串比目的字符串长,数组越界.如果后面还有代码,将出现意想不到的错误.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • guzhilei1986
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 10:57:5314楼 得分:2
    strcpy


      原型:extern char *strcpy(char *dest,char *src);
           
      用法:#include <string.h>
     
      功能:把src所指由NULL结束的字符串复制到dest所指的数组中。
     
      说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
            返回指向dest的指针。
     
      举例:


       
    C/C++ code
    // strcpy.c #include <syslib.h> #include <string.h> main() { char *s="Golden Global View"; char d[20]; clrscr(); strcpy(d,s); printf("%s",d); getchar(); return 0; }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • elovenana
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 11:20:1015楼 得分:0
    char *dest = "11";
    这个是一个常字符串,怎么可能修改呢?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zclever
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 11:31:3916楼 得分:0
    引用 4 楼 k2eats 的回复:
    其一、char[3]="11";
    其二、char *dest = "11";是常量字符串,不可写,相当于const char*dest = "11";保存在常量区,应该使用数组的形式

    同意这位兄弟的看法
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hmsuccess
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 11:43:4717楼 得分:0
    注意字符串的字面值
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • QQ461053777
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 12:02:3218楼 得分:0
    等我学会了再告诉你们
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • e_sharp
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 12:43:3119楼 得分:0
    /*    程序2
        char *src = "ABCDEF.................";
        char *dest = "11";
            如果用程序2,执行有误,请问下原因
    */

    ----------------------------------

    char *dest = "11"; //常量不能修改
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • c_fresher
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 13:28:5720楼 得分:0
    引用 4 楼 k2eats 的回复:
    其一、char[3]="11";
    其二、char *dest = "11";是常量字符串,不可写,相当于const char*dest = "11";保存在常量区,应该使用数组的形式

    顶~~~出现的2个问题描述的很准确
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • tfnadnt
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 14:00:3921楼 得分:0
    C/C++ code
    #include <stdio.h> char *_strcpy(char *dest, char *src) { char *temp = dest; for(; *src != '\0'; src++) { *dest = *src; dest++; } *dest = '\0'; return temp; //这个就很有问题吧,再说了,返回这个干什么 } int main (int argc, const char * argv[]) { // 程序1 char src[] = "ABCDEF................."; char dest[2] = "11"; //越界 // /* 程序2 char *src = "ABCDEF................."; char *dest = "11"; //这样定义的字符串为常量,不能修改的 如果用程序2,执行有误,请问下原因 */ char *p = _strcpy(dest, src); printf("%s", p); return 0; }



    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved