标题:这段代码为何无法运行?
只看楼主
hffjhhh
Rank: 1
等 级:新手上路
帖 子:127
专家分:7
注 册:2019-4-10
结帖率:90.38%
已结贴  问题点数:20 回复次数:2 
这段代码为何无法运行?
指针数组p所指向字符的值一个一个拷贝给指针q.
以下代码对指针数组q也进行了初始化,这样子q算不算指向目标?
但却无法运行,是什么原因?代码如下:
程序代码:
#include <stdio.h>
void strcpy1(char *q[], char *p[], int n)
{
    int i;
    int j, m;
    for (i = 0; i<n; i++)
        for (m = 0; m<100 && *(p[i] + m); m++)
            *(q[i] + m) = *(p[i] + m);
    for (j = 0; j<n; j++)
        printf("%s ", q[j]);
}
int main(void)
{
    char *p[5] = { "asdg", "uewnngn", "sngn", "fhh", "mngkkd" };
    char *q[5] = {"qqqq","wwwwwww","eeee","iii","yyyyyy"};
    strcpy1(q, p, 5);
    return 0;
}
搜索更多相关主题的帖子: int char 无法运行 指针 代码 
2020-05-11 14:17
fulltimelink
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:171
专家分:752
注 册:2020-4-1
得分:10 

因为q在常量存储区,不是堆栈存储区
2020-05-11 14:26
JabinZ
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:34
专家分:180
注 册:2020-5-7
得分:10 
你的 p q 里面存的都是 地址(你写的那些字符串的地址), 而那些字符串实际所在的地方都是常量数据区域,这个区域的数据无法修改 。 这个问题你把p,q里面的内容用 地址形式输出你就会发现些规律

你如果想修改成功, q 要声明成容器
以下的代码,你在把 p q 的地址输出,看看和之前有什么不同
程序代码:
#include <stdio.h>
void strcpy1(char q[][10], char *p[], int n)
{
    int i;
    int j, m;
    for (i = 0; i<n; i++)
        for (m = 0; m<100 && *(p[i] + m); m++)
            *(q[i] + m) = *(p[i] + m);
    for (j = 0; j<n; j++)
        printf("%s ", q[j]);
}
int main(void)
{
    char *p[5] = { "asdg", "uewnngn", "sngn", "fhh", "mngkkd" };
    char q[5][10] = {"qqqq","wwwwwww","eeee","iii","yyyyyy"};
    strcpy1(q, p, 5);
    
    printf("\n&p => %p, &q => %p\n", &p, &q);
    printf("&(p[0]) => %p, &(q[0]) => %p\n", &(p[0]), &(q[0]));
    printf("&(p[1]) => %p, &(q[1]) => %p\n", &(p[1]), &(q[1]));
    printf("p[1] => %p, q[1] => %p\n", p[1], q[1]);
    printf("p[1] = %s, q[1] = %s\n", p[1], q[1]);
    return 0;
}
2020-05-11 18:19



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




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

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