我是C的新手并注意到当我运行我的代码时,我遇到了分段错误,我不知道如何修复它...任何帮助都很感激!
void getComment(unsigned int len, char *src) {
unsigned int size;
size = len – 4;
char *comment = malloc(size+1);
memcpy(comment, src, size);
printf("%s\n", comment);
return;
}
int main(int argc, char* argv[]) {
if (argc < 3) {
printf("Usage: %s <str1> <str2>\n", argv[0]);
return -1;
}
getComment(atoi(argv[1]), argv[2]);
return 0;
}
答案 0 :(得分:1)
这是一个很长的镜头,但你是否说明了C中的字符串是否以空值终止的事实?即字符串"abc"
实际上由4个字符'a', 'b', 'c' and '\0'
组成。当您使用memcpy
时,最后一个null可能会丢失。并且printf
假定字符串也以空值终止,null表示必须停止打印输出的位置。
C有许多函数可以使用字符串并占用空字符。尝试查找以下功能:strlen
,strcpy
(而不是memcpy
)。
答案 1 :(得分:0)
其中可能存在许多运行时错误。
更好的方法是检查是否:
if (size > 0 && size <= strlen(src) {
memcpy(comment, src, size);
comment[strlen(comment)] = '\0';
}