我正在尝试编写一个程序,它将采用两组字符串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; }
Armen Tsirun.. 6
这里有一个问题
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]
还没有指向你允许写入的任何内存.你也应该在这里分配内存.
这里有一个问题
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]
还没有指向你允许写入的任何内存.你也应该在这里分配内存.