【问题标题】: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++ 中是未定义的行为
  • 即使在较旧的编译器上,这也应该会产生带有正确设置的警告,除非编译器真的很糟糕。
  • 没有错误或警告但打印原始值
  • 是的,但我的指针不是数组

标签: c++ function pointers memset


【解决方案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
猜你喜欢
  • 1970-01-01
  • 2018-06-10
  • 1970-01-01
  • 1970-01-01
  • 2018-08-08
  • 1970-01-01
  • 1970-01-01
  • 2013-09-22
  • 1970-01-01
相关资源
最近更新 更多