当我 运行 我的程序出现 '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 个是主要问题:
main()
: 为结果分配space。
getRandomHex()
分配给 result[i]
而不是错误地使用 strncat()
。
getRandomHex()
:不要假设 result
参数包含终止符 '\0'。
getRandomHex()
使用字符串,因为它更容易编写。使它 static const
成为 read-only.
- 已删除未使用的 headers。
- 定义
LEN
而不是幻数 6。
- 将
hexCharacters()
的大小从 hard-coding 导出为 16
。
- 合并两个打印语句,并使用 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));
}
}
我知道这个错误与我 运行 我的程序尝试使用多少内存有关,但我是 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 个是主要问题:
main()
: 为结果分配space。getRandomHex()
分配给result[i]
而不是错误地使用strncat()
。getRandomHex()
:不要假设result
参数包含终止符 '\0'。getRandomHex()
使用字符串,因为它更容易编写。使它static const
成为 read-only.- 已删除未使用的 headers。
- 定义
LEN
而不是幻数 6。 - 将
hexCharacters()
的大小从 hard-coding 导出为16
。 - 合并两个打印语句,并使用 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));
}
}