【发布时间】:2018-04-11 15:08:21
【问题描述】:
我是一名初级程序员。我编写了以下代码,使用指针将一个字符串复制到另一个字符串中。 但我没有得到输出。编译器说分段错误。 我已经翻遍了这个程序,但无济于事。我无法定位故障,以及如何解决它。 很难相信,但我现在已经被困了将近 2 个小时。 非常感谢任何帮助。
#include<stdio.h>
char *copy(char*, char*);
int main() {
char *str1 = "avanti";
char *str2 = "ujj";
printf("%s\n", str1);
char *result = copy(str1, str2);
printf("%s", result);
}
char *copy(char *str1, char *str2){
int i=0;
while (*(str2+i) != '\0') {
*(str1+i) = *(str2+i);
i++;
}
*(str1+i) = '\0';
return str1;
}
【问题讨论】:
-
特别是在迈出第一步时,请随意使用
const。 请说出你的参数名称。src和dest随时击败str1和str2。 -
请注意,使用
char str1[] = "avanti";是可以的,因为它比您复制的内容要长。如果你有char *str2 = "alphabet";,即使是数组也会有问题——缓冲区溢出。另外,使用str2[i] != '\0'比*(str2 + i) != '\0'更容易阅读——两者在效率上没有区别。 -
@JonathanLeffler 关于你的第二点,这个问题看起来像是一个理解语法的练习,所以完全使用
*s 似乎是合理的,并且本身不值得批评,尽管数组语法是很好的附加信息