2 xh931076284 xh931076284 于 2015.07.21 22:25 提问

c++字符数组赋值 内存分配

string str1="1234.56";
char ch[str1.length()+1];
double dtude=atof(str1.c_str());
sprintf(ch, "%.5f", dtude);
cout<<ch<<endl;
运行的结果为:1234.56000

但是实际上,ch的大小是8,却存储了10个元素。valgrind 也没有检测到内存非法读写的问题,运行都正常,有大神知道这是什么原因吗?

5个回答

caozhy
caozhy   Ds   Rxr 2015.07.22 06:22

C语言是一种简陋而充满陷阱的语言,它需要程序员格外小心,而不是依赖完备的运行时检查和编译检查。

oyljerry
oyljerry   Ds   Rxr 2015.07.21 22:53

刚好越界后空间你可以访问而已,但这个不保证,也说不定后面代码会用到越界的地方就有问题了。

wjq
wjq   2015.07.21 22:59

你越界访问是可以,但越界之后的那段内存区域随时可能被其他声明的变量占用并修改相应的值。也就是说你越界储存或者读取的数据是不可靠的

CSDNXIAON
CSDNXIAON   2015.07.21 22:28

字符指针与字符数组内存分配的区别
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

hatlonely
hatlonely   2015.07.21 22:50

不要使用sprintf函数,用snprintf代替

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C语言(C++)如何给字符数组赋值
1、char c[5];  c[0]=’H’; c[1]=’e’; c[2]=’l’; c[3]=’l’; c[4]=’o’; 2、charc[5]={‘H’,’e’,’l’,’l’,’o’}; 3、(1)如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预测的;   (2)如果花括号中提供的初值个数(即字符个数)大于数组长度,则按语法错误处理;   (3)如果花括号中提供的初值
C语言中字符数组的初始化与赋值
C语言中字符串的初始化赋值及其他操作
[C语言]给一个二维字符数组赋值的问题
二维字符数组的赋值
字符数组的初始化与赋值
字符数组的初始化方式变量的定义指的是:指明变量所属类型、变量名称、分配空间以及初始化其初始值的过程。可以看出,变量的初始化是变量的定义的一部分。除了const变量需要显示的初始化以外,如果变量定义的时候,不显示初始化,编译器会为变量以默认值进行初始化。变量的赋值和变量的初始化有着本质的区别,具体见我的另一篇博客:初始化那点小事。
如何给给字符数组赋值
要说C语言中最让我觉得棘手的,就是字符数组的,C语言中没有字符串这个类型,字符串只能存放在字符型数组中。那么,我们先来看看如何给一个一维数组赋值:1、定义的时候直接赋值:char arr[10] = {"kitty"};这种写法也可以直接省略花括号,直接写成:char arr[10] = "kitty";2、初始化列表,把各个字符依次赋给数组中的元素:char arr[10] = {'k','i',
[原]Java字符串的内存分配--从C语言字符串操作说起
最近项目需要用C语言完成字符串操作。 我多年没碰C了,脑海中直接浮现出大一时学的strcat(source, dest), 于是写了第一个版本, 运行时报错:#include <string.h> #include <stdio.h>int main(){ char strA[]="USER"; // 应改为 strA[100]="USER";显示指定数组大小,但仍有超出的风
C字符数组的赋值
C字符数组赋值 举例如下: char a[10]; 1、定义的时候直接用字符串赋值 char a[10]="hello"; 注意:不能先定义再给它赋值,如  char a[10];  a[10]="hello"; 这样是错误的! 2、对数组中字符逐个赋值 char a[10]={'h','e','l','l','o'}; 3、利用strcpy char a[10];
C语言字符数组赋初值
C语言可以给字符数组赋值的方法 转载 2012年04月06日 10:23:36 标签:语言 /c 31190 学了这么多年的C语言,突然发现连字符串赋值都出错,真的很伤心。 char a[10]; 怎么给这个数组赋值呢? 1、定义的时候直接用字符串赋值 char a[10]="hello"; 注意:不能先定义再给它赋值,如char a[
为二维字符数组赋值
-
c语言二维字符数组的初始化和赋值
char *argv[256];//二维字符数组 memset(argv,0,256); for(int j=0;j<256;j++)//二维字符数组初始化申请内存 { argv[j]=(char*)malloc(sizeof(char*)); } //argv=(char*[256])malloc(256); std::vector results=StringSplit(cm