为啥 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 功能不起作用? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
使用 get / http / subscribe 的功能不起作用,为啥? [复制]