| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 471 人关注过本帖
标题:指针问题
只看楼主 加入收藏
尤慕思
Rank: 2
等 级:论坛游民
帖 子:18
专家分:12
注 册:2011-2-26
结帖率:100%
收藏
已结贴  问题点数:2 回复次数:8 
指针问题
遇到一个错误的试题:


#include <stdio.h>
#include<string.h>
int main(int argc, char *argv[])
{
    char *p1="abc",*p2="ABC";
    strcat(p1,p2);
    puts(p1);
    return 0;
}

麻烦大虾指出其中的问题以及出问题的原因!!!!!
搜索更多相关主题的帖子: 问题 include return 
2011-03-07 13:11
瓦药墙
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:218
专家分:556
注 册:2009-9-16
收藏
得分:0 
p1指向了常量区, strcat(p1, p2); //这样就错了
2011-03-07 13:13
瓦药墙
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:218
专家分:556
注 册:2009-9-16
收藏
得分:0 
#include <stdio.h>
#include<string.h>
int main(int argc, char *argv[])
{
    char p1[100]="abc",*p2="ABC";
    strcat(p1,p2);
    puts(p1);
    return 0;
}
2011-03-07 13:13
瓦药墙
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:218
专家分:556
注 册:2009-9-16
收藏
得分:2 
说下, 指针指向了常量区, 然后试图通过指针修改常量区数据, 会错的...


比如  char *ptr = "abc";     //ptr指向了常量区

以下操作是不允许的
*ptr = 'd';
ptr[1] = 'e'
*(ptr + 2) = 'f'
...


原因: 常量不可修改
2011-03-07 13:17
尤慕思
Rank: 2
等 级:论坛游民
帖 子:18
专家分:12
注 册:2011-2-26
收藏
得分:0 
回复 3楼 瓦药墙
多谢大侠指点,

那么有没有办法在初始化时把无名字符串放在非常量区,
即我们可以通过指针对无名字符串进行修改?
2011-03-08 16:04
瓦药墙
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:218
专家分:556
注 册:2009-9-16
收藏
得分:0 
你可以用字符数组, 或者用malloc or new 申请一块内存空间, 申请到的是堆空间, 这样, 你就可以通过指针来修改了
2011-03-08 16:28
chenwei435
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:2
帖 子:322
专家分:1611
注 册:2010-11-28
收藏
得分:0 
没有错误啊。不行的话可以在tc 下试一试
2011-03-08 22:05
尤慕思
Rank: 2
等 级:论坛游民
帖 子:18
专家分:12
注 册:2011-2-26
收藏
得分:0 
回复 5楼 尤慕思
字符数组肯定可以使用,
我想试着用指针修改无名字符串

但是无法给无名字符串动态分配内存,

你能写个用malloc或者new的例子吗?


我不想钻牛角尖,这是一同学拿来为难我的问题,O(∩_∩)O~
2011-03-08 22:25
尤慕思
Rank: 2
等 级:论坛游民
帖 子:18
专家分:12
注 册:2011-2-26
收藏
得分:0 
回复 6楼 瓦药墙
我用的编译器是C-free,编译通不过;
网上说TC过时了,用它写程序不严格吧,有些错误它查不出来,
会误导以后的学习
我刚才用tc编译了一下,还真能通过,
你还是换个编译器吧,O(∩_∩)O~
2011-03-08 22:34
快速回复:指针问题
数据加载中...
 
   



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

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