#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#define MAX_STRING_SIZE 20
int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
int N, Q;
int i, j, k, l, m, x;
char **str;
scanf("%d\n", &N);
str = (char **)malloc(sizeof(char *) * N);
for(i = 0; i < N; i++){
str[i] = malloc(MAX_STRING_SIZE * sizeof(char));
scanf("%s",str[i]);
}
printf("%d\n",N);
for(j = 0; j < N; j++){
printf("%s",str[j]);
printf("\n");
}
scanf("%d",&Q);
printf("%d\n",Q);
char **qry_str;
qry_str = (char **)malloc(sizeof(char *) * Q);
for(l = 0; l < Q; l++){
qry_str = malloc(MAX_STRING_SIZE * sizeof(char));
scanf("%s",qry_str[l]);
}
for(m = 0; m < N; m++){
printf("%s",qry_str[m]);
printf("\n");
}
for(k = 0; k < N; k++)
free(str[k]);
free(str);
for(x = 0; x < N; x++)
free(qry_str[x]);
free(qry_str);
return 0;
}
我是编程的新手,我正在尝试使用malloc函数为两个2d字符串分配内存,但是当我尝试输入第二个字符串qry_str的数据时,屏幕上会出现(null),程序退出。
我的问题是:
答案 0 :(得分:1)
在你的第二种情况下,你在循环中覆盖qry_str
,这不是预期的。你最想要的是
for(l = 0; l < Q; l++){
qry_str[l] = malloc(MAX_STRING_SIZE * sizeof(char));
scanf("%s",qry_str[l]);
}
那说,一些建议:
i
,j
,l
,m
。 for
语句的第一个子句无论如何都会将计数器重新分配给0,即使您只重用一个。 sizeof(char)
被保证在C中为1。相反,你应该考虑写一下这样的陈述
qry_str[l] = malloc(MAX_STRING_SIZE * sizeof *qry_str));
使它们更健壮。
scanf()
系列的返回值,以确保成功。