具有分段故障的C程序

时间:2017-02-26 09:54:49

标签: c

我是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;
 }

2 个答案:

答案 0 :(得分:1)

这是一个很长的镜头,但你是否说明了C中的字符串是否以空值终止的事实?即字符串"abc"实际上由4个字符'a', 'b', 'c' and '\0'组成。当您使用memcpy时,最后一个null可能会丢失。并且printf假定字符串也以空值终止,null表示必须停止打印输出的位置。

C有许多函数可以使用字符串并占用空字符。尝试查找以下功能:strlenstrcpy(而不是memcpy)。

答案 1 :(得分:0)

其中可能存在许多运行时错误。

  1. len -4可以返回负值。
  2. 您可能会错过将传入字符串的最后一个空字符复制到注释中。那个案例评论将不再是字符串,当你使用%s时,它会给你错误或垃圾。
  3. 更好的方法是检查是否:

    if (size > 0 && size <= strlen(src) {
         memcpy(comment, src, size);
         comment[strlen(comment)] = '\0';
    }