【发布时间】:2016-04-13 14:17:31
【问题描述】:
我正在尝试编写一个程序,该程序将采用两组字符串 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;
}
【问题讨论】:
-
请记住,scanf 不会读取字符串中的空白字符。此外,如果您在 20 个字符的缓冲区上使用 scanf ,那么您应该使用 scanf("%19s", ... ) 这样您就不会溢出缓冲区。使用 fgets(而不是 gets)一次读取整行会更安全。
标签: c arrays string strcmp strcpy