简单程序里最后一个“}”前的printf竟然无法执行!

csoapy 2003-03-24 03:16:51
请解惑:
main()
{int i=0;
char *s="123456",*a="";
i=strlen(s);
printf("%d \n",i);
strcpy(a,s);
puts(a);
printf("dao ci jie shu "); /*这一句无法输出!*/
printf("\n\n");
}
...全文
57 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
chongyiren 2003-03-24
  • 打赏
  • 举报
回复
解答正确,加十分。
Meyer 2003-03-24
  • 打赏
  • 举报
回复
使用strcpy 你必须自己保证你的 目的地具有足够的空间能容得下 原字符串

一般:
char* pdest = (char*)malloc(strlen(psorc)+1);
if(pdest!=NULL)
{
strcpy(pdest, psorc);
}
kicool 2003-03-24
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAXLEN 20 //规定a的最大长度

void main()
{int i=0;
char *s="123456";
char *a=(char *)malloc(MAXLEN); //动态分配内存
i=strlen(s);
printf("%d \n",i);
strcpy(a,s);//a指向内存分配的字节数必须>=strlen(s)+1
puts(a);
printf("dao ci jie shu ");
printf("\n\n");
free(a); //释放分配的内存
}
ransion 2003-03-24
  • 打赏
  • 举报
回复
char *a="";
改为char a[]=" ";
csoapy 2003-03-24
  • 打赏
  • 举报
回复
请写个更正事例吧,我回去翻书的时候也好有个参考
谢谢各位了,
俺不会忘了还有个“CSDN”!
LIFEForSoft 2003-03-24
  • 打赏
  • 举报
回复
char *a="";

改为用数组就可以了

char a[80];
TopCat 2003-03-24
  • 打赏
  • 举报
回复
你的strcpy(a, s)一句明显有问题,a还没分配内存呢
lbaby 2003-03-24
  • 打赏
  • 举报
回复
更正:*a指向的内存长度为1(即:'\0')
lbaby 2003-03-24
  • 打赏
  • 举报
回复
输出了

你的*a指向的内存长度为0
却将"123456"拷到了a所指向的内存中

将不属于自己的内存空间破坏(有可能是"dao ci jie shu "的空间,例如:'a'被'\0'取代的话,你的printf就像是没有执行一样)

所以,致使你的输出出错

learnner 2003-03-24
  • 打赏
  • 举报
回复
devc++里,编译没问题,但还没执行到你说的那句就报错了

strcpy(a,s);
或者
puts(a);
有问题
prettynacl 2003-03-24
  • 打赏
  • 举报
回复
strcpy(a,s);
这一句通过了?
csoapy 2003-03-24
  • 打赏
  • 举报
回复
难道是编译器……

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧