标题:关于指针的一个问题,查看了好久 ,还有点不懂,求帮
只看楼主
任重道远
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2015-9-12
结帖率:66.67%
 问题点数:0 回复次数:12 
关于指针的一个问题,查看了好久 ,还有点不懂,求帮
截图.zip (17.39 KB)
#include <stdio.h>
#include <string.h>

int main(void)
{                                                               //第一个问题:
    char dest[]="........";                                    // char *dest=".......";
    char source[]="adfjkajkfdkojasofjojaosdjifio";            //  char *source="adfjkajkfdkojasofjojaosdjifio";
    size_t n;                                                 //  书上说这两种方式是等价的,但为什么换成这种方式程序运行就会发生内存错误?
                                                              // 是不是以char *dest=".......",这种方式声明初始化 它的内存就确定不变了,
    while(1)                                                  //而以     char dest[]="......",这种方式声明初始化 它的内存会根据存储的东西而变化。
    {
        printf("\nEnter a number,enter -1 to quit...");
        scanf("%d",&n);

        if(n<0)
          break;
        else
        {
            strncpy(dest,source,n);
            printf("%s\n",dest);
        }
    }
    getchar();
    return 0;
}

第二个问题:

#include <stdio.h>
#include <string.h>

int main(void)
{
    char *dest="........";
    char source[]="adfjkajkfdkojasofjojaosdjifio";
    size_t n;

    while(1)
    {
        printf("\nEnter a number,enter -1 to quit...");
        scanf("%d",&n);
        dest=(char *)malloc(sizeof(dest)+1);                //此时已经动态分配了存储,但为什么输出依然有问题?
                                                            //结果是 上传的附件中的截图,求帮助。
        if(n<0)
          break;
        else
        {
            strncpy(dest,source,n);
            printf("%s\n",dest);
        }
    }
    getchar();
    return 0;
}


[ 本帖最后由 任重道远 于 2015-9-17 20:56 编辑 ]
搜索更多相关主题的帖子: source include 
2015-09-17 20:46
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
说这两种方式等价的书可以扔了

授人以渔,不授人以鱼。
2015-09-17 21:11
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:0 
以下是引用TonyDeng在2015-9-17 21:11:45的发言:

说这两种方式等价的书可以扔了



剑栈风樯各苦辛,别时冰雪到时春
2015-09-17 21:13
任重道远
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2015-9-12
得分:0 
回复 2楼 TonyDeng
,那这两个问题的答案。。。求解,谢谢
2015-09-17 21:16
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
知道那些代码在干什么吗?追踪到在哪一行上崩溃再说。

授人以渔,不授人以鱼。
2015-09-17 21:21
任重道远
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2015-9-12
得分:0 
回复 5楼 TonyDeng
问题我差不多明白了,现在就是想知道char *dest="....."和char dest[]="....."这两种初始化方式的区别,我知道一个是声明了一个指向字符串的指针,一个是数组;
是不是前者分配的存储空间就固定了,以后存储更大的数据时需重新分配空间;而后者的空间是可变的,看存储的内容而定,谢谢
2015-09-17 21:31
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
以下是引用任重道远在2015-9-17 21:31:56的发言:

问题我差不多明白了,现在就是想知道char *dest="....."和char dest[]="....."这两种初始化方式的区别,我知道一个是声明了一个指向字符串的指针,一个是数组;
是不是前者分配的存储空间就固定了,以后存储更大的数据时需重新分配空间;而后者的空间是可变的,看存储的内容而定,谢谢


前者是一个指向常量储存区的指针,后者是在栈上分配的一块空间。

授人以渔,不授人以鱼。
2015-09-17 21:33
任重道远
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2015-9-12
得分:0 
回复 7楼 TonyDeng
明白了,买的那本书错误挺多的,谢谢帮忙
2015-09-17 21:36
鲤鱼爱美丽
Rank: 8Rank: 8
来 自:冥界
等 级:蝙蝠侠
威 望:5
帖 子:288
专家分:843
注 册:2015-4-8
得分:0 
主要是scanf()函数的使用可能会出现问题,第一个程序的解决方案

可以在scanf()这一行的下面加fflush(stdin);

代码代码,带着的石头码!!!
2015-09-18 09:41
鲤鱼爱美丽
Rank: 8Rank: 8
来 自:冥界
等 级:蝙蝠侠
威 望:5
帖 子:288
专家分:843
注 册:2015-4-8
得分:0 
函数名: fflush
功 能: 清除一个流
用 法: int fflush(FILE *stream);

代码代码,带着的石头码!!!
2015-09-18 09:42



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




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

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