标签: memset

这些数组声明有什么区别?

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

int main(void){

char s1[30]="abcdefghijklmnopqrstuvwxyz";

printf("%s\n",s1);

printf("%s",memset(s1,'b',7));

getch();

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

上面的代码有效,但是当我像这样创建 s1 数组时,

char *s1="abcdefghijklmnopqrstuvwxyz";
Run Code Online (Sandbox Code Playgroud)

它不会在编译时出现任何错误,但无法在运行时运行。

我正在使用 Visual Studio 2012。

你知道为什么吗?

我发现 memset 的原型是:

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

c memset

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

避免多类型结构的memset

我想避免memset()在这样的结构上使用:

typedef struct {
    int size;
    float param1;
} StructA;

typedef struct {
    StructA a;
    unsigned int state;
    float param2;
} Object;
Run Code Online (Sandbox Code Playgroud)

我可以做这样的事情(伪代码,我现在无法检查)?

Object obj;
int *adr = (int*)&obj;
for (int i; i < sizeof(obj); i++) {
    *adr++ = 0;
}
Run Code Online (Sandbox Code Playgroud)

它会将obj的每个成员设置为零吗?

编辑:回答评论问题.我一直在研究一些情况(使用uni-type结构),其memset速度比手动初始化慢两倍.所以我会考虑尝试初始化多类型结构.

避免memcpy()也会很好(避免使用<string.h>lib).

c memset memcpy

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

向量上的memset使其大小为0

我试图清除矢量中的所有数据而不改变其大小memset.但是在memset操作后,vector的大小变为0.这是确切的代码:

std::vector<T> buckets[2];
MAX_BUCKET_SIZE=16;
Run Code Online (Sandbox Code Playgroud)

构造函数:

buckets[0].resize(MAX_BUCKET_SIZE);
std::cout << "Actual size0 " << buckets[0].size() << std::endl;
buckets[1].resize(MAX_BUCKET_SIZE);
std::cout << "Actual size1 " << buckets[1].size() << std::endl;
Run Code Online (Sandbox Code Playgroud)

在一个功能:

std::cout << "Actual size2 0 " << buckets[0].size() << std::endl;
std::cout << "Actual size2 1 " << buckets[1].size() << std::endl;
...
...
while (...){
    delete_data(current_bucket);

    std::cout << "current bucket ** " << current_bucket << std::endl;
    std::cout << "Actual size3 0 " << buckets[0].size() << std::endl;
    std::cout << "Actual size3 1 …
Run Code Online (Sandbox Code Playgroud)

c++ vector memset

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

这两个memset有什么区别?

int color[1001][1001];
int m,n;
m=10;
n=10;
memset(color,0,sizeof(color));
memset(color,0,sizeof(color[0][0])*m*n );
Run Code Online (Sandbox Code Playgroud)

这两个memset语句有什么区别?

任何答案都将受到高度赞赏.提前致谢.

c c++ memset

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

C,memset双数组失败

我想double动态声明一个类型数组,所以这是我的代码

void function(int length, ...)
{
    ...

    double *a = malloc(sizeof(double) * length);
    memset(a, 1, sizeof(double) * length);
    for (int i = 0; i < length; i++)
    {
        printf("%f", a[i]);
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

当我通过length2,代码不会打印所有1.它只打印以下内容:

7.7486e-304
7.7486e-304
Run Code Online (Sandbox Code Playgroud)

那么,我该怎么做才能修复它?

c memset

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

关于C中Memset的简单问题

我是C的前任,所以请耐心等待我; 我知道我可以将数组语句作为*cc[];

我的问题是关于memset:

  char str[] = "hello!";
  memset (str,'-',2);
  puts (str);
Run Code Online (Sandbox Code Playgroud)

工作良好.但:

char *str = "hello!";
  memset (str,'-',2);
  puts (str);
Run Code Online (Sandbox Code Playgroud)

不工作,我知道char *str = ...是一个正常的数组语句.

如果有人可以帮我这个,我谢谢你!

c memset

-4
推荐指数
1
解决办法
74
查看次数

在`const`数组上使用memset()函数是否合法?

在以下代码中,函数const清除数组的元素memset.

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

int main() {
    const int a[3] = {1, 2, 3};
    memset(a, 0, sizeof(a));
    printf("%d %d %d\n",a[0],a[1],a[2]);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

memsetconst阵列上使用是合法的吗?

c arrays const memset

-4
推荐指数
1
解决办法
367
查看次数

memset导致"矢量迭代器不兼容"错误

目前正在使用我的DirectX游戏并在常量缓冲区构造函数中使用memset(0)(或VS中的ZeroMemory宏)来使用零初始化所有值,并且它可以正常工作.当我不小心尝试以这种方式初始化包含向量的其他结构时出现问题.根据编译器(VS2010/VS2012),这会导致"矢量迭代器不兼容",std :: vector :: end更加精确.我可以理解memset可能会使向量迭代器无效,但是在我将元素推回到向量之后,为什么"结束"迭代器无法正常工作.它不应该重新定位向量将迭代器结束到正确的位置(在最后一个元素之后)?所有类型的std :: some_container :: end迭代器都受此影响了吗?

#include <vector>

class MyClass
{
public:
    MyClass() { 
        memset(this, 0, sizeof(*this));
    }
    ~MyClass() {}
    std::vector<int>& GetData() { return m_data; }
    float            m_range;
private:
    std::vector<int> m_data;

};

int main()
{
    MyClass myClass;
    myClass.GetData().push_back(1);
    myClass.GetData().push_back(2);

    for (auto it = myClass.GetData().begin(); it != myClass.GetData().end(); it++)     
    {
        //stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ iterator vector memset

-8
推荐指数
1
解决办法
431
查看次数

标签 统计

memset ×8

c ×6

c++ ×3

vector ×2

arrays ×1

const ×1

iterator ×1

memcpy ×1