#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main()
{
int i = 0, len1=0, len2=0;
int BUFSIZE = 1000;
char* string1[20];
char* string2[20];
FILE *fp1 = fopen("input1.txt", "r");
FILE *fp2 = fopen("input2.txt", "r");
if ((fp1 == 0)||(fp2 == 0)){
fprintf(stderr, "Error while opening");
return 0;
}
string1[i] = (char*)malloc(BUFSIZE);
string2[i] = (char*)malloc(BUFSIZE);
while (fgets(string1[i], BUFSIZE, fp1)) {
i++;
len1+=strlen(string[i]);
string1[i] = (char*)malloc(BUFSIZE);
len1+=strlen(string1[i]);
}
i = 0;
while (fgets(string2[i], BUFSIZE, fp2)) {
i++;
string2[i] = (char*)malloc(BUFSIZE);
}
printf("Output: \n");
srand(time(NULL));
int j = rand()%i;
int k = (j+1)%i;
fflush(stdout);
printf("%d - %s %d -%s", j, string1[j], k, string1[k]);
printf("%d - %s %d -%s", j, string2[j], k, string2[k]);
printf("\n");
printf("%d", len1);
int x;
for(x = 0; x<i; x++){
free(string1[x]);
free(string2[x]);
}
scanf("%d", x);
fclose(fp1);
fclose(fp2);
return 0;
}
感谢user1807597的帮助,我终于实现了读取两个字符串并存储到数组中。但是我仍然无法获得数组的长度,我尝试将len + = strlen(string [i]);在while循环中,但编译器在调试时中断。有人知道为什么吗?谢谢!
答案 0 :(得分:4)
对于数组的长度,您有两个主要选择。
你做得足够大,以至于你认为你不会使用更多的参赛作品。
enum { MAX_LINES = 16 * 1024 };
char *lines[MAX_LINES];
size_t num_lines = 0;
您可以动态分配数组。
char **lines = 0;
size_t max_lines = 0;
size_t num_lines = 0;
...
if (num_lines >= max_lines)
{
size_t new_lines = max_lines * 2 + 2;
char **space = realloc(lines, new_lines * sizeof(*space));
if (space == 0)
...deal with out of memory...
lines = space;
max_lines = new_lines;
}
两个系统都有效。动态分配在前几次执行时会更加繁琐,但是在内存不足之前不会遇到问题,而且这些天耗尽内存需要很长时间。如果您猜错了,固定分配可能会耗尽空间,如果您只处理小文件,则名义上会浪费内存。这些日子里,“浪费”的记忆通常非常小。
哪个更好取决于您希望程序处理的问题的规模。如果它们很小,固定但慷慨的分配是明智和容易的。如果它们很大,动态分配就更明智了。
答案 1 :(得分:1)
我已经修改了代码。我想现在没关系。你在第一个while循环中计数错误。i++
应该在len1+=strlen(string[i]);
之后。在上一个scanf语句中scanf("%d", x);
,你错过了运营商'&amp;'。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main()
{
int i = 0, len1 = 0, len2 = 0;
int BUFSIZE = 1000;
/*
you have too few lines here,
If my file contains more than 20 lines,tragedy will occur!
*/
char* string1[20];
char* string2[20];
FILE* fp1 = fopen("input1.txt", "r");
FILE* fp2 = fopen("input2.txt", "r");
if ((fp1 == 0) || (fp2 == 0))
{
fprintf(stderr, "Error while opening");
return 0;
}
string1[i] = (char*)malloc(BUFSIZE);
string2[i] = (char*)malloc(BUFSIZE);
while (fgets(string1[i], BUFSIZE, fp1)!=NULL)
{
/*
i++;
*/
len1 += strlen(string1[i]);
i++;
string1[i] = (char*)malloc(BUFSIZE);
}
i = 0;
while (fgets(string2[i], BUFSIZE, fp2))
{
i++;
string2[i] = (char*)malloc(BUFSIZE);
}
printf("Output: \n");
srand(time(NULL));
int j = rand() % i;
int k = (j + 1) % i;
fflush(stdout);
printf("%d - %s %d -%s", j, string1[j], k, string1[k]);
printf("%d - %s %d -%s", j, string2[j], k, string2[k]);
printf("\n");
printf("%d", len1);
int x;
for (x = 0; x < i; x++)
{
free(string1[x]);
free(string2[x]);
}
/*
scanf("%d", x);
*/
scanf("%d",&x);
fclose(fp1);
fclose(fp2);
return 0;
}