【发布时间】:2018-02-02 16:42:34
【问题描述】:
我有两个版本的 C 代码。第一个有效,但第二个无效。
第二个的输出是分段错误,但我不知道为什么。
也许有人可以解释我的错误?我真的很感激。
这行得通:
#include <stdio.h>
#include <stdlib.h>
void stringcpy(const char*, char*);
int main() {
const char * original = "C is fun.";
int size = sizeof(original) / sizeof(char*);
copy = (char*)malloc(sizeof(char) * 11 + 1);
stringcpy(original, copy);
printf("%s\n", copy);
free(copy);
return 0;
}
void stringcpy(const char* original, char* copy) {
int i;
for(i = 0; *(original + i) != '\0'; i++) {
*(copy + i) = *(original + i);
}
*(copy + i) = '\0';
}
这不起作用:
#include <stdio.h>
#include <stdlib.h>
void stringcpy(const char*, char*);
int main() {
const char * original = "C is fun.";
char * copy;
stringcpy(original, copy);
printf("%s\n", copy);
free(copy);
return 0;
}
void stringcpy(const char* original, char* copy) {
int size = sizeof(original) / sizeof(char*);
copy = (char*)malloc(sizeof(char) * size + 1);
int i;
for(i = 0; *(original + i) != '\0'; i++) {
*(copy + i) = *(original + i);
}
*(copy + i) = '\0';
}
【问题讨论】:
-
仅供参考,C 中的参数是按值传递的。含义:函数中的
copy = ...对调用者没有任何意义。考虑一下。不相关的don't castmallocin C programs. -
变量
original是一个指针。在指针上执行sizeof可以得到 pointer 的大小,而不是它所指向的大小。如果您想要字符串的长度,请使用strlen。 -
另外你还是用了
sizeof(array) / sizeof(array[0])成语错误。 -
@Someprogrammerdude 为什么走错路了?