为啥 memset 功能不起作用? [复制]

Posted

技术标签:

【中文标题】为啥 memset 功能不起作用? [复制]【英文标题】:Why memset function doesn't work? [duplicate]为什么 memset 功能不起作用? [复制] 【发布时间】:2017-05-30 12:03:48 【问题描述】:

为什么 memset 函数在带有 char 指针的 c++ 函数中不起作用?

void change(char* input)
  memset(input, 'a', strlen(input));


int main()
  char* p = "foo";
  cout << p << endl;
  change(p);
  cout << p << endl;

【问题讨论】:

此代码在 C++11 及更高版本中会产生编译错误。请使用现代编译器 请注意,可修改的字符串文字在 C++ 中是未定义的行为 即使在较旧的编译器上,这也应该会产生带有正确设置的警告,除非编译器真的很糟糕。 没有错误或警告但打印原始值 是的,但我的指针不是数组 【参考方案1】:

您尝试修改字符串文字。字符串文字是只读的,您应该使用例如const char* 声明指向它们的指针时。

修改(或尝试修改)常量或只读数据会导致未定义的行为

如果要修改字符串,需要使用数组:

char p[] = "foo";

【讨论】:

prog.cc:在函数'int main()'中:prog.cc:11:13:警告:ISO C++ 禁止将字符串常量转换为'char*' [-Wwrite-strings] char * p =“富”;是对应的gcc编译器msg 谢谢,但我想用字符指针来做 因为,[我在 cmets 中提到过] @EmmaAlex 在您的change 函数中,您有一个指针,这还不够吗?否则,您必须分配内存,将字符串复制到该内存中,调用change,打印字符串并释放内存。 @EmmaAlex 或者如果其他函数返回一个指针(指向可修改数据),那么只需将该指针传递给change

以上是关于为啥 memset 功能不起作用? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥复制功能在 setTimeout 中不起作用?

为啥交换功能对我不起作用? [复制]

使用 get / http / subscribe 的功能不起作用,为啥? [复制]

多维动态数组,为啥不起作用?

为啥外部链接在构建后在 phonegap 应用程序上不起作用

为啥 ngfor 指令不起作用,尽管我在 Typescript 类中创建了正确的对象