关于sprintf的用法

asdk77 2012-11-07 01:48:59
写了一个简单的程序,用到了sprintf函数
#include<stdio.h>

void main()
{
char *p ="adjgdgjjfh";
char *m;
sprintf(m, "** ^^%s", p);
printf("%s", m);
}
用gcc可以编译,可显示结果为“Segmentation fault (core dumped)”。
不知错在哪,请指教,谢谢!

...全文
290 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
asdk77 2012-11-09
  • 打赏
  • 举报
回复
谢谢各位!以后会注意!
max_min_ 2012-11-08
  • 打赏
  • 举报
回复
引用 2 楼 sunhuafeng521 的回复:
指针没有指向任何内存就使用了
错了吧!是有指向内存,只不过是我们不知道指向的那块内存而已! 即使这样也没有错的,只不过很危险而已!他这里的情况只是内存不够,导致段错误啦
proorck6 2012-11-08
  • 打赏
  • 举报
回复
这是个库函数,在设计的时候针对一个“内存块”,而不是一个“内存指针”。 可以用m[20]来解决,也可以用malloc和free解决。 指针只是指向一个位置,sprintf需要的是一块连续的内存。
startservice 2012-11-08
  • 打赏
  • 举报
回复
指针需要分配内存。
赵4老师 2012-11-08
  • 打赏
  • 举报
回复
电脑内存只是一个一维二进制字节数组及其对应的二进制地址; 人脑才将电脑内存中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是很多数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、……
lin5161678 2012-11-08
  • 打赏
  • 举报
回复
引用 7 楼 extremelove 的回复:
等你学完进程的虚拟存储器就知道为什么了 现在你只需要记住不对NULL读写 不对未初始化的指针读写 不对只读区读写
表示 没学过进程 也能知道这些
czc1009 2012-11-08
  • 打赏
  • 举报
回复
指针没有初始化
jiandingzhe 2012-11-08
  • 打赏
  • 举报
回复

#include <malloc.h>

......

m = malloc(1024);
sprintf(m, "", ...);

// do something with m

free(m);

......
jiandingzhe 2012-11-08
  • 打赏
  • 举报
回复
你的m没有分配空间
extremelove 2012-11-07
  • 打赏
  • 举报
回复
等你学完进程的虚拟存储器就知道为什么了 现在你只需要记住不对NULL读写 不对未初始化的指针读写 不对只读区读写
extremelove 2012-11-07
  • 打赏
  • 举报
回复
段错误有四种情况: 空指针:即NULL 一般为0 一般对这个地址的读写都会造成操作系统发送段错误信号给进程(有些操作系统甚至允许这个地址的读写,windows和linux都不允许) 坏指针:即没有初始化的指针 可能指向任何一个地址 有可能合法 也可能非法,你的代码就是这种情况 你应该庆幸它引起段错误,因为这个取决于运行时不确定情况 保护故障:进程定义了对应 没有对应地址的访问权限,例如对只读存储区做写操作 堆栈用完:这种情况一般不会发生
AnYidan 2012-11-07
  • 打赏
  • 举报
回复
Segmentation fault (core dumped) 一般都是非法读写内存
zanyang1103 2012-11-07
  • 打赏
  • 举报
回复
上网找点“指针跟数组的关系”方面的资料吧,这问题刚搞c挺常见的,讲一句两句说不清楚。
baichi4141 2012-11-07
  • 打赏
  • 举报
回复
又一个把字符指针当字符串使用的新手
一鸣惊人 2012-11-07
  • 打赏
  • 举报
回复
指针没有指向任何内存就使用了
Kuovane 2012-11-07
  • 打赏
  • 举报
回复
#include<stdio.h>

void main()
{
  char *p ="adjgdgjjfh";
  char m[20];//这里空间不够,不然没地方存字符串
  sprintf(m, "** ^^%s", p);
  printf("%s", m);
}

69,382

社区成员

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

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