标签: memset

使用memset设置数组

我仍然是C的新手,我遇到了memset功能的问题.

我将一个char*传递给一个函数,在这个函数中我创建一个数组,然后使用memset来设置每个值.我一直在使用dbx来观察这个变量,因为它进入函数,并且由于某种原因它在我们传递memset后被设置为"".

首先,为什么会发生这种情况?我假设memset必须重置char*所在的内存?

其次,有没有更好的方法将每个元素设置为"0"?

这是我的代码:

static char *writeMyStr(char *myStr, int wCount) {

   // here myStr is set to "My String is populated"  

   char **myArr;
   myArr = (char **) malloc(sizeof(char *) * wCount);
   memset(myArr, 0, sizeof(char *) * wCount);   // myStr is set to ""

   ... populate array ... 

}
Run Code Online (Sandbox Code Playgroud)

c arrays memset

3
推荐指数
1
解决办法
2万
查看次数

什么是OpenCL最快的memset()替代品?

我正在使用OpenCL,我需要memset()一些全局设备内存中的数组.CUDA具有类似memset()API的功能,但OpenCL没有.我读了这篇文章,在那里我发现了两种可能的选择

  1. 使用memset()与一些临时缓冲区在主机上,然后clEnqueueWriteBuffer()该复制到设备上的缓冲区.
  2. 排队(sp?)以下内核:

    __kernel void memset_uint4(__ global uint4*mem,__ private uint4 val){mem [get_global_id(0)] = val; }

哪个更好?或者更确切地说,在哪种情况下/哪个平台比另一个更好?

注意:如果零记忆的特殊情况值得特别对待,那也很高兴知道.

performance memset opencl

3
推荐指数
2
解决办法
5545
查看次数

清除char数组最佳方案 - memset与否?

在我目前的代码中,我有类似的东西

while(true) //Infinite loop
{
   char buff[60];
   .....
   ....
}
Run Code Online (Sandbox Code Playgroud)

我想知道什么是更好的性能明智.

  1. 在进入无限循环然后使用memset(buff, 0, 60);或之前声明char buff(将包含包含换行符和换行符的字符串)
  2. 保持原样.memset会影响性能吗?

注意:

我的要求是char每次循环重启时我都需要让数组完全干净.

c++ memset

3
推荐指数
1
解决办法
2649
查看次数

在c中使用memset()

我写了一个小程序来习惯memset()操作:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>

int main()
{
    int arr[10], i;
    int t = INT_MAX;
    memset(arr, t, sizeof(arr));
    for (i = 0; i < 10; i++)
        printf("%d\t",arr[i]);

    printf("%d",t);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

上述计划的结果是:

-1 -1 -1 -1 -1 -1 -1 -1 -1 -1

2147483647
Run Code Online (Sandbox Code Playgroud)

memset()上述程序的行为是什么?为什么要将数组元素设置为-1

c memset

3
推荐指数
1
解决办法
1023
查看次数

为什么或为什么不在C++中使用memset?

我必须维护一个程序中有很多memset.在现代C++中使用memset是一个好习惯吗?

为什么不呢?

如果没有,memset应该更喜欢什么?

c++ memory memory-management memset

3
推荐指数
1
解决办法
1432
查看次数

这是将 struct sockaddr_in.sin_zero[8] 初始化为 0 的正确方法吗?

我现在正在这样做,但是

struct sockaddr_in my_addr;
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(MYPORT);
inet_aton("10.12.110.57", &(my_addr.sin_addr));
memset(&(my_addr.sin_zero), '\0', 8);
Run Code Online (Sandbox Code Playgroud)

我可以这样做吗?这也会将结构的其余部分归零吗?IEsin_zero[8]

struct sockaddr_in my_addr = {AF_INET, htons(MYPORT), 0};
// Or
struct sockaddr_in my_addr = {AF_INET, htons(MYPORT), {0} };
Run Code Online (Sandbox Code Playgroud)

c c++ struct memset

3
推荐指数
1
解决办法
3087
查看次数

在玩具示例中,必须使用'\ 0'进行memset

我在tutorialspoint中遇到了以下使用memset的例子:(我不熟悉C.)

#include <stdio.h>
#include <string.h>

int main(){
    char src[40];
    char dest[100];

    memset(dest, '\0', sizeof(dest));
    strcpy(src, "This is tutorialspoint.com");
    strcpy(dest, src);

    printf("Final copied string : %s\n", dest);

    return(0);
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么使用memset行,因为当评论该行时,编译和结果是相同的.我想问一下那条线是否必要?或者在执行strcpy()时这样做是否是一种好习惯?或者只是一条随机线.

谢谢!

c memset

3
推荐指数
1
解决办法
985
查看次数

memset c ++中的一对数组

我有一对对.我想在这个数组上使用memset来生成0,1或-1.我该怎么做?这是我们一直做的正常程序吗?

该对和数组是:

std::pair<int, int> ar[100][100];
Run Code Online (Sandbox Code Playgroud)

c++ memset std-pair

3
推荐指数
1
解决办法
916
查看次数

以下代码是否存在内存泄漏?

    unsigned char *bin_data;
    unsigned char *bin_model;

    bin_data = new unsigned char[200];
    memset(bin_data, 0, 200);
    bin_model = new unsigned char[200];
    memset(bin_model, 0, 200);
Run Code Online (Sandbox Code Playgroud)

我正在审查上面的代码,我有一种直觉,它可能会导致内存泄漏,但我逻辑上找不到原因.

我认为这是因为我们将memset指向0,数据的地址可能会丢失.我们想要做的只是在从接口获取数据之前初始化bin_data和bin_model,这将用于进一步处理,因为获取数据有可能失败.

上面的代码会导致任何问题吗?

谢谢!

c++ memory-leaks initialization memset unsigned-char

3
推荐指数
1
解决办法
119
查看次数

结构零初始化方法

struct datainfo info = { 0 };
Run Code Online (Sandbox Code Playgroud)

与...相同

struct datainfo info;
memset(&info, 0, sizeof(info));
Run Code Online (Sandbox Code Playgroud)

有什么区别,哪个更好?

c memset

3
推荐指数
1
解决办法
92
查看次数