关于指针的一个问题,查看了好久 ,还有点不懂,求帮
截图.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 编辑 ]