请教一下怎么对函数接收的字符串常量参数修改呢?
void findTheFirstOne(char * string){ while (*string != '\0'){ *string = toLowerCase(*string); string++; } } 像上面一个函数是遍历一个字符串把大写改成小写,但是像这样就出错: findTheFirstOne("QASSS"),因为"QASSS"是常量不能修改,咋做呢?总不能每次输入字符串参数都先分配字符串数组吧?

请教一下怎么对函数接收的字符串常量参数修改呢?
void findTheFirstOne(char * string){ while (*string != '\0'){ *string = toLowerCase(*string); string++; } } 像上面一个函数是遍历一个字符串把大写改成小写,但是像这样就出错: findTheFirstOne("QASSS"),因为"QASSS"是常量不能修改,咋做呢?总不能每次输入字符串参数都先分配字符串数组吧?
1 ysc3839 Nov 22, 2018 via Android 常量当然不能改了,要保存到变量里面。 可以这样 char str[] = "QASSS"; findTheFirstOne(str); |
2 RaynorGu Nov 22, 2018 const char * string |
3 RaynorGu Nov 22, 2018 看错了,无视 |
4 XinLake Nov 22, 2018 via Android malloc 内存然后赋值(内容存储于堆),能改 xxx[] = “ xxx ” 放到数组里(内容存储于栈),能改 *xxx = “ xxx ” 看编译设置内容有可能存储于不可修改的内存区。 代码中 “ xxx ” 一般不能改,内存甚至可能存储于代码区,看编译器。 |
5 kokutou Nov 22, 2018 常量当然不行了。 放变量里。。。 |
6 katsusan Nov 22, 2018 via iPhone 字符串常量用 strncpy 复制到一个变量里再传给函数 |
7 shylockhg Nov 22, 2018 toLowerCase(const char *src, char *dest, size_t n); |
8 fgodt Nov 22, 2018 传入 findTheFirstOne("QASSS")是可以改的 只是改了你没获取到 |
9 ipwx Nov 22, 2018 你这个函数用起来太麻烦,每次还得 strncmp。。。 建议分成两个函数: void strToLowerCaseInplace(char *string); void strToLowerCase(const char* src, char* dest, size_t n); (@shylockhg 已经说过了) |
11 inhzus Nov 22, 2018 为什么要修改常量的值呢...就算修改了你也并不能使用啊... 除非你复制一份, 作为返回值, 这个还算比较可行的想法 |
13 rochek Nov 22, 2018 findTheFirstOne("QASSS") 如果我没记错的话,这里的字符串是储存在 bss 段的 是不可改写的 |
14 codechaser OP 看来只能复制到字符串数组了,谢谢各位。 |
15 1a0ma0 Nov 22, 2018 开辟内存空间, 每个一个地址放个字符就可以了. |