如何在C中实现重复char的函数?

nou*_*ine -2 c

我有这个功能让我很难过:

char * repeat_char(const char c, const int times, char *result) {

   for (int i = 0; i < times; i++) {
      *(result + i) = c;
   }

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

你可能会告诉我我正在尝试重复这些c times时间并将结果存储在字符串中result(char指针).

我这样调用它:

char *result = "";
repeat_char('o', 3, result); // hoping for "ooo"
Run Code Online (Sandbox Code Playgroud)

但我得到的只是一个令人讨厌的:

RUN FINISHED; Segmentation fault; core dumped; real time: 160ms; user: 0ms; system: 0ms
Run Code Online (Sandbox Code Playgroud)

我真的很困惑.任何人?谢谢

use*_*738 5

那是因为您正在尝试更改为不可修改的字符串文字.这就是你得到错误的原因.这是未定义的行为.

  • 分配动态分配的内存并将指针传递给它或 -

  • 只需传递一个不是字符串文字的char数组.

确保传递的字符串足够大以保存结果.(同时'\0')这不是强制性的.您可以在没有终止的情况下使用char数组,NUL但是您不能在需要NUL终止char数组的标准字符串函数中使用它.

解决方案是使用类似的东西

char *result = malloc(10);
// check the return value of malloc.
// if result is not NULL pass it.
Run Code Online (Sandbox Code Playgroud)

要么

char result[10];
Run Code Online (Sandbox Code Playgroud)

另外别忘了把'\0'(由于上述原因).

即使字符串文字是可变的..

那么它也会让你尝试访问数组索引超出范围的分段错误.

char *str = ""基本上指向一个单独的元素数组,\0 该数组基本上被衰减成指向数组的第一个元素的指针,即a char和被赋值str.所以你只有1那里的元素,你不能3字符放在\0那里.

分段错误意味着您正在访问一些您不应该访问的内存.