- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
作为 C 的初学者,我正在为一个晦涩难懂的问题而苦苦挣扎,因为我找不到解决这个特定问题的方法,所以我想问您以下问题:目前我正在尝试了解 void 指针及其算术运算。我试图编写一个通用函数,它接受一个指向数组的空指针、数组的长度和一个元素的大小,并将给定的数组分成两个不同的部分(list1 和 list2):
void split(void *array, int arrlen, int objsize)
{
// divide the arrlen and save the values
int len_list1 = arrlen / 2;
int len_list2 = arrlen - len_list1;
// Allocate memory for two temporary lists
void *list1 = (void*)malloc(objsize * len_list1);
void *list2 = (void*)malloc(objsize * len_list2);
if (list1 == NULL || list2 == NULL)
{
printf("[ERROR]!\n");
exit(-1);
}
// list1 gets initialized properly with int and char elements
memmove(list1, array, len_list1*objsize);
printf("list1:");
print_arr(list1, len_list1);
// memmove((char*)list2, (char*)array+list_1_length, list_2_length*objsize); (*)
memmove(list2, (int*)array+len_list1, len_list2*objsize);
printf("list2:");
print_arr(list2, len_list2);
}
我的问题如下:如果我给这个函数一个 int 数组它会工作正常,但是如果我用一个 char 数组作为参数调用 split(),我必须...
memmove((char*)list2, (char*)array+list_1_length, list_2_length*objsize);
//memmove((int*)list2, (char*)array+list_1_length, list_2_length*objsize);
注释行(*)出来,才能有相同的结果。一个解决方案肯定是编写一个 if-else 条件并测试 objsize:
if (objsize == sizeof(int))
// move memory as in the 1st code snippet
else
// move memory with the (int*) cast
但是使用这个解决方案我还必须检查其他数据类型,所以非常感谢你给我一个提示。
谢谢!
-麻嘴
最佳答案
memmove(list2, (int*)array+len_list1, len_list2*objsize);
在这里你输入array
到int *
, 并添加 len_list1
给它。但是向指针添加一些东西,意味着它将乘以该指针数据类型的一个元素的大小。因此,如果一个 int 是 4 个字节,并且您将 5 添加到 int *
变量,它将移动 20 个字节。
因为您确切地知道要将指针移动多少字节,所以您可以将 is 强制转换为 char *
(char = 1 字节),并向其添加字节数。
所以不是 (int*)array+len_list1
, 你可以使用 (char*)array+(len_list1*objsize)
关于c - 如何将通用 void 数组拆分为 parts.c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28130524/
这确实是一个分开的用法问题,但欢迎提出有关如何实现此目的的其他想法。 我需要创建一个引导设备,设置如下: ( up to 4MB erase block size (EBS)): partitions
我想知道定义库及其内容的方式背后的原因是什么。更具体地说,库需要列出所有部分,并且这些部分需要说明它们所属的库。 这种双向对我来说似乎是不必要的,我希望从库中引用这些部件就足够了。此外,在库中添加或删
我对 lambda 表达式比较陌生,如果有人能解释为什么返回类型与我预期的不同,我会很高兴。 () -> MultipartBody.Part! 究竟是什么? Single.just{ val
我对 map reduce 输出部分文件有一些疑问。 1> part-r-*文件和map reduce输出的part-*文件有什么区别? part-r-* 是 mapper 的输出,part-* 是
我需要为移动应用程序创建 Rails API。 API 将发送和接收 json 格式的请求。 我还想创建一个后端来管理应用程序。后端将在桌面(管理员)上使用带有用户界面的 Rails。 我想知道是否有
我正在使用此功能发布多张图片 @Multipart @POST("addad") Call addad( @Part List files , @Part Multip
我有一个正在为项目开发的小型 Java 程序,它使用 JavaMail 从指定的 URI 中提取用户的收件箱,然后开始处理消息。 在 Outlook 中,属性菜单中有一个功能可以设置邮件的到期日期,它
我不完全理解 part 之间的区别/part of和 import/export在 Dart 中使用库时。例如: one.dart: library one; part "two.dart"; Cla
这个问题在这里已经有了答案: How can I upload files to a server using JSP/Servlet? (14 个答案) 关闭 6 年前。 我正在尝试通过 JSP
我想使用 spark 从 html 表单上传文件。以下是我处理发布路由的 java 函数: Spark.post("/upload", "multipart/form-data", (request,
对于我的 python 扩展,我有 C(来自嵌入式库)和 C++ 文件,它们被编译并链接在一起。只有 C++ 部分与 Python 接口(interface)(通过 SWIG)。这在 VS2015 的
我想使用子例程 sum_real 访问数组派生类型中数组的元素。即:对所有人的权重中的第一个条目求和。 type my_type real, dimension(:), allocatable
最近我将 sonarqube 从 4.0 升级到 4.3.3。升级后当我尝试运行 maven 构建时出现错误: Failed to execute goal org.codehaus.mojo:son
我拿了一个 wsp 文件,并像往常一样做了我的 stsadm -o addsolution。然后我进入中央管理->解决方案管理,结果一切正常。然后我部署了 Web 部件,到目前为止没有问题。 问题是当
在我的 Eclipse 插件中我有这个工作流: 在Package Explorer中获取当前选中的项目 做某事 在Package Explorer中获取当前选中的项目(同1) 做一些不同的事情 1(和
我正在尝试使用 Spring MVC 和 Thymeleaf 上传文件,但出现异常,提示未提供多部分配置。 这是我的 Thymeleaf 表格: Picture
我知道 map reduce 输出存储在名为 part-r-* for reducer 和 part-m-* for mapper 的文件中。 当我运行 mapreduce 作业时,有时会在单个文件中
我们在运行 CentOS 的 Virtual Box 上使用 Hadoop 的同时处理 BigData。每当我们执行某些程序时,它都会创建 2 个不同的文件 1) part-r-00000 和 2)
我在其他论坛上看到过有关此问题的相关帖子(请参阅: http://www.mrexcel.com/forum/showthread.php?t=372534 ),但我尝试了所有发现的方法,但没有成功。
我无法将图像上传到服务器。我在这里尝试了很多相关问题的解决方案,但没有一个对我有用。这是我的文件: SecurityApplicationInitializer: package co
我是一名优秀的程序员,十分优秀!