当我 运行 我的程序出现 'Segmentation fault 11' 错误。我不确定我的代码中的什么会导致此错误

When I run my program I get the 'Segmentation fault 11' error. I'm not sure what in my code would cause this error

我知道这个错误与我 运行 我的程序尝试使用多少内存有关,但我是 C 的新手,我不太了解内存管理然而。如果有人愿意花时间告诉我这是在我的代码中发生的什么地方,我将不胜感激。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

char * getRandomHex(int length, char * result) {
    char hexCharacters[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
    
    for (int i = 0; i < length; i++) {
        char randChar = hexCharacters[rand()%16];
        strncat(result, &randChar, 1);
    }

    return result;
}

int main() {
    for (int i = 0; i < 10; i++) {
        char * result;
        result = getRandomHex(6, result);
        printf("%s", result);
        printf("\n");
    }
}

前 3 个是主要问题:

  1. main(): 为结果分配space。
  2. getRandomHex() 分配给 result[i] 而不是错误地使用 strncat()
  3. getRandomHex():不要假设 result 参数包含终止符 '\0'。
  4. getRandomHex() 使用字符串,因为它更容易编写。使它 static const 成为 read-only.
  5. 已删除未使用的 headers。
  6. 定义 LEN 而不是幻数 6。
  7. hexCharacters() 的大小从 hard-coding 导出为 16
  8. 合并两个打印语句,并使用 return 值(即 result 变量)。
#include <stdio.h>
#include <stdlib.h>

#define LEN 6

// caller must allocate result array of size at least length + 1 bytes
char *getRandomHex(int length, char *result) {
    static const char hexCharacters[] = "0123456789ABCDEF";
    for (int i = 0; i < length; i++) {
        result[i] = hexCharacters[rand() % (sizeof(hexCharacters) - 1)];
    }
    result[length] = '[=10=]';
    return result;
}

int main() {
    char result[LEN + 1];
    for (int i = 0; i < 10; i++) {
        printf("%s\n", getRandomHex(LEN, result));
    }
}