Chinaunix

标题: 动态字符串的初始值是什么啊? [打印本页]

作者: daiyihang    时间: 2007-05-10 12:37
标题: 动态字符串的初始值是什么啊?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define WORD_SIZE 21


int main(int argc, char *argv[])
{
     char* word1;
     char* word2;
     word1 = malloc(WORD_SIZE);
     word2 = malloc(WORD_SIZE);
     
     return 0;
}


分配空间给word1 word 后, 但没有往里面写东西,
这时候应该怎么用strcmp来判断word1,word2,是还没有往里面写东西的状态?
if (strcmp(word1, "\0") == 0)

还是有其他方法来判断?
比如 if(word1 == NULL)

这两个试了,都不行
作者: MMMIX    时间: 2007-05-10 12:39
原帖由 daiyihang 于 2007-5-10 12:37 发表
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define WORD_SIZE 21


int main(int argc, char *argv[])
{
     char* word1;
     char* word2;
     word1 = m ...


作者: cjaizss    时间: 2007-05-10 12:41
不知道你为什么要这么做
作者: daiyihang    时间: 2007-05-10 12:41
原帖由 MMMIX 于 2007-5-10 12:39 发表



说话啊
作者: cjaizss    时间: 2007-05-10 12:43
原帖由 daiyihang 于 2007-5-10 12:41 发表


说话啊

原则上,malloc后分配的空间里面的初始数据不做任何保障,也就是什么数据都可能。
作者: MMMIX    时间: 2007-05-10 12:44
原帖由 daiyihang 于 2007-5-10 12:41 发表


说话啊

难道从来没有人告诉过你 malloc 分配的内存中的数据是随机的么?
作者: flw2    时间: 2007-05-10 12:48
清楚自己想做什么,清楚自己做的正是自己想做的。

memcmp
作者: daiyihang    时间: 2007-05-10 12:49
原帖由 MMMIX 于 2007-5-10 12:44 发表

难道从来没有人告诉过你 malloc 分配的内存中的数据是随机的么?


就是想确定他们是随机的需要怎么判断.
作者: cjaizss    时间: 2007-05-10 12:50
原帖由 daiyihang 于 2007-5-10 12:49 发表


就是想确定他们是随机的需要怎么判断.

......
事先知道这里面的数据是随机的,还需要判断吗?
作者: 林杰杰    时间: 2007-05-10 12:58
咋叫随机的...
难道要把里面的数据搜集起来,做千儿八百个样本,然后统计一下它是不是呈高斯分布的...

既然你不能事先确定里面有些啥东西,就说明它是随机的咯...
作者: epegasus    时间: 2007-05-10 13:08
不用判断,必要的时候清0就就可以
作者: MMMIX    时间: 2007-05-10 13:08
原帖由 daiyihang 于 2007-5-10 12:49 发表


就是想确定他们是随机的需要怎么判断.

楼主还是直接说说自己要做嘛,以及为嘛要做这些。老实说,这样兜圈子真的很无聊。
作者: arenxl    时间: 2007-05-11 12:26
memset吧,管它什么,只要分配成功就可以了
作者: 教书的    时间: 2007-05-11 12:47
打印一下就知道了:))))
作者: flw    时间: 2007-05-11 12:51
原帖由 MMMIX 于 2007-5-10 13:08 发表

楼主还是直接说说自己要做嘛,以及为嘛要做这些。老实说,这样兜圈子真的很无聊。

re
作者: net_robber    时间: 2007-05-11 13:08
在设计思想上,用逻辑判断

这是人的工作

不是机器的工作

如果机器有了逻辑

那人类就完蛋了
作者: safedead    时间: 2007-05-11 16:58
看了楼主的贴
我的直觉是
凡是存储过敏感数据的内存
不用之前一律清零

省得被其它程序在申请内存时无意中看到

在windows系统, 刚刚申请的内存的内容很可能是最近执行的程序(已经退出)的静态变量内容(如果没有清零)
作者: langue    时间: 2007-05-12 07:24
原帖由 林杰杰 于 2007-5-10 12:58 发表
咋叫随机的...
难道要把里面的数据搜集起来,做千儿八百个样本,然后统计一下它是不是呈高斯分布的...

既然你不能事先确定里面有些啥东西,就说明它是随机的咯...


呵呵,这是数学方法
不过随机是一种无序的状态,我觉得这里用 “无定义” 可能更好一些,还可避免歧义。

.
作者: langue    时间: 2007-05-12 07:26
原帖由 MMMIX 于 2007-5-10 13:08 发表

楼主还是直接说说自己要做嘛,以及为嘛要做这些。老实说,这样兜圈子真的很无聊。


人有一种倾向,程度因人而异:总是假设一部分事实或者自己的某些想法已经被别人知道。
这可能成为提问时的一个障碍。

.
作者: 小丌    时间: 2007-05-12 10:02
只需要判断成功与否,管它里面的内容是什么呢,反正都是要往里写东西的!
作者: flw    时间: 2007-05-12 11:57
原帖由 safedead 于 2007-5-11 16:58 发表
看了楼主的贴
我的直觉是
凡是存储过敏感数据的内存
不用之前一律清零

省得被其它程序在申请内存时无意中看到
[flw] 这个是操作系统应该做的事。

在windows系统, 刚刚申请的内存的内容很可能是最近执行的程序(已经退出)的静态变量内容(如果 ...
[flw] 真的吗?我不确定,但我认为应该不是真的。如果真的是这样,那 windows 的安全性就要大打折扣。

作者: flw2    时间: 2007-05-12 12:02
原帖由 flw 于 2007-5-12 11:57 发表

我也表示怀疑
作者: MMMIX    时间: 2007-05-12 14:16
原帖由 langue 于 2007-5-12 07:26 发表


人有一种倾向,程度因人而异:总是假设一部分事实或者自己的某些想法已经被别人知道。
这可能成为提问时的一个障碍。

.

这话公道
作者: MMMIX    时间: 2007-05-12 14:23
原帖由 langue 于 2007-5-12 07:24 发表


呵呵,这是数学方法
不过随机是一种无序的状态,我觉得这里用 “无定义” 可能更好一些,还可避免歧义。

.

这个还是引用标准吧

C99 7.20.3.3
  7.20.3.3 The malloc function
  Synopsis
1        #include <stdlib.h>
         void *malloc(size_t size);
  Description
2 The malloc function allocates space for an object whose size is specified by size and
  whose value is indeterminate.
  Returns
3 The malloc function returns either a null pointer or a pointer to the allocated space.


关于 indeterminate 的词义标准中也有明确的规定,感兴趣的可以翻翻
作者: mik    时间: 2007-05-12 16:11
linux 有一个分配零页的函数,不知用户态是否能用。不记得了
作者: scutan    时间: 2007-05-12 17:15
原帖由 mik 于 2007-5-12 16:11 发表
linux 有一个分配零页的函数,不知用户态是否能用。不记得了



那个函数应该是vmalloc()吧, 在用户态应该不能用的!
不过用户态也有相应的函数啊, calloc()
作者: yanweihao    时间: 2007-05-12 19:02
原帖由 daiyihang 于 2007-5-10 12:37 发表
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define WORD_SIZE 21


int main(int argc, char *argv[])
{
     char* word1;
     char* word2;
     word1 = m ...


没意义吧
如果怕出错,可以memset(word1, 0, WORD_SIZE)




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2