我有一个函数,这让我很难:
char * repeat_char(const char c, const int times, char *result) {
for (int i = 0; i < times; i++) {
*(result + i) = c;
}
return result;
}
正如您可能知道的,我尝试重复c
times
次,并将结果存储在字符串result
(一个字符指针)中。
我是这样引用它的:
char *result = "";
repeat_char('o', 3, result); // hoping for "ooo"
但我得到的只是一个下流的:
RUN FINISHED; Segmentation fault; core dumped; real time: 160ms; user: 0ms; system: 0ms
我真的很困惑。有人知道吗?谢谢
3条答案
按热度按时间h7appiyu1#
这是因为你试图改变一个字符串常量,它是 * 不可修改的 *,这就是为什么你会得到这个错误,它是undefined behavior。
'\0'
)* 这不是强制的。您可以有一个字符数组而不终止NUL
,但您不能在标准字符串函数中使用它,因为它要求以NUL
终止的字符数组。解决方法是使用类似于
或
也不要忘记把
'\0'
(由于上述原因).即使字符串文字可变..
那么它也会导致分段错误,试图访问超出范围的数组索引。
char *str = ""
基本上指向一个包含\0
的单元素数组,这个数组基本上变成了指向数组第一个元素的指针,也就是char
,并被赋值给str
,所以这里只有1
元素,你不能把3
字符和\0
放在一起。分段错误表示您正在访问一些不应该访问的内存。
0dxa2lsx2#
在C语言中,字符串文字不能被修改。任何试图修改字符串文字的行为都将导致未定义的行为。你可以用大小为
times
的char数组来代替字符串文字。变更
到
bfnvny8b3#
标题.h
函数.c