|
|
1
18
该代码段为2个字符的名称分配了足够的空间。 通常,字符串缓冲区将从某处填充,即i/O。如果字符串的大小事先未知(例如,从文件或键盘读取),则通常使用以下三种方法之一:
|
|
2
5
首先,
您往往会发现以下情况:
有时对于非基于字符的数组,您会看到:
这将为22个整数分配足够的空间。 |
|
|
3
3
这个
这将为49个字符的字符串分配足够的空间(C样式的字符串必须以NULL结尾)(
看起来你问题中的代码应该是
注意
对于动态分配的内存,如果您尝试在已分配的内存之外进行读/写,那么您就(不)幸运了。 例如
第一行为9个字符和一个空字符分配了足够的空间。
第三行可能会工作,例如,如果在某个字符串旁边有分配的内存,并且“Hello there,world!”运行到该内存空间,它可能会打印您的字符串以及下一个内存空间中的任何内容。如果第二个空间以NULL结尾,那么它将停止——除非它不是,否则在这种情况下,它将漂移并最终发生故障。 这个例子是一个非常简单的操作,但很容易出错。C是个棘手的问题——小心点。 |
|
|
4
1
你的电话
|
|
|
5
1
您需要分配足够的内存来保存需要放入的内容。例如,如果要分配内存来保存字符串,则需要分配足够的内存来保存预期的最长字符串加上终止null的一个字节。如果要处理ASCII字符串,这很简单:每个字符一个字节加一个字节。如果使用unicode字符串,事情会变得更复杂。 |
|
|
6
1
第一点-最好不要在malloc的参数中使用绝对数,始终使用sizeof和倍数。如上所述,为某些类型分配的内存因编译器和平台而异。为了保证为“blob”类型的数组获取足够的空间,最好使用如下内容:
这样,无论类型是什么,不管它在内存中看起来如何,您都会得到正确的数量。 C、 作为一种低级语言,它没有边界检查。这意味着如果您正在查看的索引实际上不在数组中,则无需进行任何检查。事实上,它不会阻止你访问任何地方的内存,即使它不属于你的程序(尽管你的操作系统可能会,这就是segfault)。这就是为什么,无论何时在C中传递数组,都需要传递它的长度,以便接收数组的函数知道它有多大。不要忘记,“数组”实际上只是指向第一个元素的指针。 当传递字符串时,这是非常没有帮助的——每个字符串参数都会变成两个参数,因此使用了欺骗。任何标准C字符串都以NULL结尾。字符串中的最后一个字符应为ASCII值0。任何字符串函数都会沿着数组工作,直到它们看到并停止为止。这样它们就不会溢出阵列,但如果由于某种原因阵列不存在,它们就会溢出。 这是被理解的
是5,但要存储它,还需要一个字符。例如。:
是的,sizeof(char)是不必要的,因为它被定义为1,但我发现它更清晰,这绝对是一个好习惯。 |
|
9-Pin · 释放具有内部空字节的动态分配字符串 1 年前 |
|
Viewed · 如何从popen中获得结果? 2 年前 |
|
|
dhutturi · malloc()没有分配我期望它[复制]的内容 2 年前 |
|
|
vansergh · 如何为malloc分配的数组释放内存? 2 年前 |
|
|
EagleStar · 显示错误的值:C指针还是malloc问题? 2 年前 |