- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在下面的代码中,我尝试使用双指针来访问多个字符串以及每个字符串中的每个字符。下面的代码按预期完美运行。但是我想知道为什么当我删除使用两次的 malloc 语句而只使用一个 calloc 语句作为
时它不起作用ptr = (char **)calloc(2, sizeof(char)*20);
上面的 Calloc 语句做的事情与下面程序中的两个 malloc 语句做的一样。 Calloc 函数将简单地初始化两个数组,每个数组大小为 20Bytes。但我仍然不明白为什么这不起作用。
#include <stdio.h>
#include <stdlib.h>
int main(){
int i=0;
char **ptr=NULL;
ptr =(char **) malloc(2*sizeof(char));
if(ptr==NULL){
printf("Memory not allocated!\n");
return -1;
}
for(i=0; i<2;i++){
ptr[i] = (char *)malloc(20*sizeof(char));
if(ptr[i]==NULL){
printf("Memory not allocated!\n");
return -1;
}
}
for(i=0; i<2;i++)
scanf("%s", ptr[i]);
for(i=0; i<2; i++)
printf("%s\n", ptr[i]);
for(i=0; i<4; i++)
printf("%c\n", ptr[0][i]);
for(i=0; i<4; i++)
printf("%c\n", ptr[1][i]);
free(ptr[0]);
free(ptr[1]);
free(ptr);
return 0;
}
最佳答案
Calloc statement above does same thing which is done by two malloc statements in below program.
不,不会。抛开您的第一个 malloc()
甚至没有为一个指针分配足够的空间这一事实,更不用说两个,您似乎对数组和指针之间的区别感到困惑。
Calloc function will simply initialize two arrays of each size 20Bytes. But still I don't understand why this doesn't work.
这确实是描述 calloc()
调用(当它成功时)的效果的合理方式。更完整的描述可能是它为两个 20 个 char
数组的数组 分配空间并归零。但这与您在示例代码中对三个 malloc()
调用所做的事情不同。
当您将 calloc()
的结果分配给类型不匹配的指针变量时,您就出错了。 char **
是指向 char *
的指针。在某些情况下,指向的指针可能是此类指针数组的一个元素。但数组与指针完全不同,因此数组的数组与指针数组不同。
很可能你想要这个,而不是:
char (*ptr)[20] = calloc(2 * sizeof(char) * 20);
或者,更好的是:
char (*ptr)[20] = calloc(2 * sizeof(*ptr));
在任何一种情况下,ptr
都被声明为一个指向 20 个 char
数组的指针,并为指向的数组保留足够的空间作为第一个元素两个这样的数组。您可以按照您在问题中演示的所有方式使用结果指针,除了您必须 free()
只有一个指针 - 没有任何其他指针。
关于c - 当我们尝试在 C 编程中将它用于多个字符串时,为什么 malloc 可以工作而 calloc 不能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50494783/
这个问题在这里已经有了答案: How to initialize var? (11 个答案) 关闭 8 年前。 我想给一个变量赋初值 null,并在下一个 if-else block 中赋值,但是编
我正在使用 TypeScript 3.8 编写 JS 和 TS 混合的代码。我写了以下行: export * as Easing from './easing'; 应该是 fair game在 Typ
我需要将 R 代码中的“/”更改为“\”。我有这样的事情: tmp <- paste(getwd(),"tmp.xls",sep="/") 所以我的 tmp是 c:/Study/tmp.xls 我希望
我有个问题。例如我有这个: id truth count 1 1 1 2 1 2 3 0 0 4 1 1 5 1 2 6 1
我正在尝试使用“IN”和“=”来查找一些 bean。我目前正在使用此代码: $ids = array(1,2,3,4); $user = 1; $things = R::find( 'thing'
是否可以在 Xcode 中部署到其他人的手机上?我没有 iPhone,但我想测试我在 friend 手机上制作的应用程序。在我支付 99 美元之前,我想确保这不会造成麻烦。 谢谢。 最佳答案 不会有任
我试图得到一个非常大的数字(超过 unsigned long long int )。所以我把它作为一个字符串,然后一个数字一个数字地转换成整数并使用它。 #include #include int
我在 Rust 中有 C 语言库的绑定(bind),但它们并不完整。 在 C 代码中,我定义了一个简化的宏,如下所示: #define MY_MACROS1(PTR) (((my_struct1
我正在努力解决这个问题。 http://jsfiddle.net/yhcqfy44/ 动画应该自动相对于 滚动到顶部每次出现滚动条时的高度。 我已经写了这个,但没有运气: var hheight =
我正在处理一个将数字作为字符串返回的 JSON API。例如 "12" ,但是,该字段值也可以是非数字的,例如:"-" . 我已将 JSON 数据解析为映射,我想将此字段提取为 elixir 中的整数
我正在尝试编写一个类,将.wav文件转换为.aiff文件作为项目的一部分。 我遇到了几个库Alvas.Audio(http://alvas.net/alvas.audio,overview.aspx)
我想在 Lucene 中将像“New York”这样的“复合词”索引为单个术语,而不是像“new”、“york”那样。这样,如果有人搜索“new place”,则包含“new york”的文档将不会匹
我希望这个解释能让我更好地了解使用宏的优点。 最佳答案 在函数中,所有参数在调用之前都会被评估。 这意味着 or 作为函数不能是惰性的,而宏可以将 or 重写为 if 语句,该语句仅在以下情况下计算分
我有一些看起来像这样的 XML foo ]]> (注意 > 登录 "> foo")和 XSLT 样式表 当我运行xsltproc stylesheet.xs
当我尝试将 Any 转换为 List 时,如下面的示例所示,我得到“Unchecked cast: Any!”到列表'警告。有没有解决此类问题的方法? val x: List = objectOfTy
我正在使用 Python 开发一个简单的爬虫。目的是创建一个 sitemap.xml。(你可以在这里找到真正的 alpha 版本:http://code.google.com/p/sitemappy/
我想知道在 VBScript 中是否可以在多行中中断 If 语句。喜欢: If (UCase(Trim(objSheet.Cells(i, a).Value)) = "YES") Or _ (UCas
for (String item : someList) { System.out.println(item); } 使用“do while”是否等效? 谢谢。 最佳答案 如果列表为空,f
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: Split string with delimiters in C 在 C 中将“,”分隔的列表拆分为数组的最佳方法
我有一个如下所示的字符数组: [0, 10, 20, 30, 670] 如何将此字符串转换为整数数组? 这是我的数组 int i=0; size_t dim = 1; char* array = (c
我是一名优秀的程序员,十分优秀!