标签: memset

memset 函数的正确类型是什么?

在尝试重新创建“memset”函数时,如果我尝试取消引用 void 指针,或者第二个参数的类型与第一个参数的类型不同,则会出错。为了使该功能正常工作,我必须将其更改为:

void ft_memset(unsigned char *st, unsigned char c, size_t n)
Run Code Online (Sandbox Code Playgroud)

是否可以像手册中那样定义该功能?

void *memset(void *s, int c, size_t n)  <- This is the man version.
Run Code Online (Sandbox Code Playgroud)

我只使用库 stdio.h 来使用 size_t 我必须使用 -Wall -Wextra -Werror 进行编译

这是我的代码:

#include <stdio.h>

//stdio.h to use size_t;
//

void *ft_memset(unsigned char *str, unsigned char c, size_t n)
{
    unsigned int i;

    i = 0;
    while (i < n)
    {
        str[i] = c;
        i++;
    }
    return(str);
}
Run Code Online (Sandbox Code Playgroud)

c char memset void-pointers function-definition

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

MemSet和MemCopy

我正在写一个内存分配器,我需要一种方法来存储一块内存中的整数.这个整数将代表块的大小,所以我可以导航到指向开头的指针.

这是我的测试示例:

//编辑:testInt的声明空间int*testInt = new int;

head_ptr = (char*) malloc(4*1024*1024); // Allocate 4MB

// EDIT: Should have used std::fill and std::copy
memset(head_ptr,23,sizeof(int)); // Set Address head_ptr = 12345

memcpy(testInt,head_ptr,sizeof(int)); // Set testInt = head_ptr

printf("testInt = %i",testInt);
Run Code Online (Sandbox Code Playgroud)

这会在倒数第二行引发分段错误.

我想做的事情有意义吗?

如果是这样,那么正确的方法是什么?

非常感谢大家的帮助!! 问题解决了 :-)

c++ memset memcpy segmentation-fault

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

使用memset归零派生结构

我想将派生结构的所有成员归零.

每隔一段时间就有数百个成员和更多成员被添加,所以我觉得明确地初始化它们容易出错.

结构没有虚函数,所有成员字段都是内置的.然而,由于具有非平凡的构造函数,它们不是POD.

除了练习的标准皱眉外,您是否看到以下任何问题?

struct Base
{
    // Stuff
};

struct Derived : public Base
{
    // Hundreds of fields of different built-in types
    // including arrays

    Derived()
    {
        ::memset(reinterpret_cast<char*>this + sizeof (Base), 0, sizeof *this - sizeof (Base));
    }
};
Run Code Online (Sandbox Code Playgroud)

谢谢.

c++ constructor sizeof memset

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

memd在2d字符数组上

使用2D数组的int,一切都很好:

 int **p = new int*[8];
 for (int i = 0; i < 8; i++)
    p[i] = new int[8];
 memset(p, 0, 64 * sizeof(int))
Run Code Online (Sandbox Code Playgroud)

但是使用二维数组的字符,我得到一个运行时错误

 char **p = new char*[8];
 for (int i = 0; i < 8; i++)
     p[i] = new char[8];
 memset(p, 0, 64 * sizeof(char));
Run Code Online (Sandbox Code Playgroud)

我的代码出了什么问题?

c++ arrays memset

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

如何为指向数组的指针执行memset?

如何为指向数组的指针执行memset?

int (*p)[2];

p=(int(*))malloc(sizeof(*p)*100);

memset(p,0,sizeof(*p)*100);
Run Code Online (Sandbox Code Playgroud)

这个分配是正确的吗?

c c++ dynamic memset

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

在c中创建我自己的memset函数

这是原型:

void *memset(void *s, int c, size_t n)
Run Code Online (Sandbox Code Playgroud)

首先我不确定我是否必须返回一些东西,因为当我使用memset时,例如

memset(str, 'a', 5);
Run Code Online (Sandbox Code Playgroud)

代替

str = memset(str, 'a', 5);
Run Code Online (Sandbox Code Playgroud)

这是我的代码所在:

void *my_memset(void *b, int c, int len)
{
    int i;

    i = 0;
    while(b && len > 0)
    {
        b = c;
        b++;
        len--;
    }
    return(b);
}

int main()
{
    char *str;

    str = strdup("hello");
    my_memset(str, 'a', 5);
    printf("%s\n", str);
}
Run Code Online (Sandbox Code Playgroud)

我不想在这个函数中使用数组,以更好地理解指针和内存,所以我没有得到2件事: - 如何将int c复制到我的void b指针上的一个字符 - 我要用什么条件来确定它在'\ 0'字符之前停止

编辑:我想知道有没有办法在没有投射的情况下执行此功能?

c memory pointers memset pointer-arithmetic

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

在指向数组的指针上调用memset?

我不认为我在这里有所了解......

bool (*lookup)[100];
memset(lookup, 0, 100 * sizeof(*lookup));
Run Code Online (Sandbox Code Playgroud)

我正在尝试初始化指向堆栈分配数组的指针(指针只会传递给堆栈帧内的调用).memset用于将数组初始化为0.

前面的代码会导致段错误,memset不像指针吗?

c memset

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

使用memset这种方式很好吗?

我这样使用memset:

class A {
    public:
       A();
    private:
       int a;
       float f;
       char str[35];
       long *lp;
    };

    A::A()
    {
       memset(this, 0, sizeof(*this));
    }
}
Run Code Online (Sandbox Code Playgroud)

我应该用这种方式吗?为什么不呢?有没有更好的办法?需要一些指导..

c++ memset

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

c ++ unsigned char数组分配 - 分段错误

我无法弄清楚我从这里得到分段错误似乎是什么问题:

#include <stdio.h>
#include <stdlib.h>
#include <cstring>

void alloc(unsigned char *data) {
    data = (unsigned char *) malloc(20);
    memset(data, 0, 20);
}

void main() {
    unsigned char *data = NULL;
    int i;
    alloc(data);
    for (i = 0; i < 20; i++) {
        data[i] = i;
        printf("%d ", *(data + i));
    }
    free(data);
}    
Run Code Online (Sandbox Code Playgroud)

无符号字符是1个字节,因此循环20应该是正确的

c malloc memset segmentation-fault unsigned-char

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

memset()对va_list的含义是什么?

我阅读了以下代码片段:

va_list args;
memset(&args, 0, sizeof(va_list));

va_start(args, xxx);
...
va_end(args);
Run Code Online (Sandbox Code Playgroud)

memset()之前有va_start()什么含义?

如果memset()拆除线路有什么区别?

c memset variadic-functions

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