gpt4 book ai didi

c - 整数数组空 - C

转载 作者:行者123 更新时间:2023-12-04 09:11:06 24 4
gpt4 key购买 nike

我正在尝试编写一个程序,它将采用两组字符串 N 和 Q。该程序的目标是打印出 Q 中的每个字符串在 N 中出现的次数。但是,我正在努力管理字符串和 C 中的指针,特别是我相信我的问题源于试图拥有一个字符串数组。执行以下代码时出现段错误。我已经注释掉了我使用 printf() 进行调试的尝试。我相信当我尝试将 S 分配给 N_array 时会出现问题。

int main() {
int N, Q;
char *N_array[1000], *Q_array[1000];

scanf("%d", &N);

for (int N_i = 0; N_i < N; N_i++) {
//printf("made it through A for loop %d times\n", N_i+1);
scanf("%s", N_array[N_i]);
}

scanf("%d", &Q);

//Does the array contain any information?
//for (int N_i = 0; N_i < N; N_i++) { printf("N_array[%d] == %d\n", N_i, N_array[N_i]);}

for (int Q_i = 0; Q_i < Q; Q_i++) {
//printf("Made it to B for loop\n");
int occurs = 0, result;
char s[21];
scanf("%s", &s[21]);
strcpy(Q_array[Q_i], s);
for (int N_i2 = 0; N_i2 < N; N_i2++) {
//printf("Made it to C for loop\n");
result = strcmp(Q_array[Q_i], N_array[N_i2]);
if (result == 0) occurs++;
}
printf("%d", occurs);
}

return 0;
}

最佳答案

这里有一个问题

for (int N_i = 0; N_i < N; N_i++) {
//printf("made it through A for loop %d times\n", N_i+1);
scanf("%s", N_array[N_i]);
}

N_Array 包含 1000 个指向 char 的指针,但这些指针中的每一个都指向,嗯……无处可去。它是一个未初始化的指针,指向您不拥有的随机内存位置。这是未定义的行为。您必须在 scanf 之前分配内存。

 N_Array[N_i] = malloc(max_length_of_string + 1);

另一个问题是这条线

 char s[21];
scanf("%s", &s[21]);

scanf 的第二个参数应该只是s,而不是&s[21],它就在你的数组之外。

在下面的一行中,您遇到的问题与我在第一点中描述的相同

strcpy(Q_array[Q_i], s);

Q_array[Q_i] 尚未指向任何允许写入的内存。您也应该在这里分配内存。

关于c - 整数数组空 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34684832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com