有人可以帮我解释为什么我的数组中会出现垃圾值吗?我的代码是:
FILE *fp;
fp = fopen("input.txt", "r");
char buffer[5000];
int size = 0;
char *ptr;
char **fileArrayPTR;
fileArrayPTR = malloc(sizeof(char*));
while (fgets(buffer, 5001, fp) != NULL) {
fileArrayPTR[size] = malloc(strlen(buffer) + 1);
strcpy(fileArrayPTR[size], buffer);
for (int p = 0; p < 5001; p++) {
if (fileArrayPTR[size][p] == '\n') {
fileArrayPTR[size][p] = '\0';
break;
}
}
//printf("%s\n",fileArrayPTR[size]);
size++;
}
for (int x = 0; x < size; x++) {
printf("%s\n", fileArrayPTR[x]);
}
如果我取消注释size++
前面的printf语句,我会得到正确的结果,但是当我把它拿出来并尝试代码的底部时它不起作用。它适用于fileArrayPTR[16]
或更高,但不适用于0-15。另外,如果我要将fileArrayPTR
返回main
,我怎么能同时返回大小呢?
答案 0 :(得分:0)
您应该重新分配字符串数组,以便在读取更多行时将其增长:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char **getlines(int *sizep) {
FILE *fp;
char buffer[5001];
int size = 0;
char **fileArrayPTR = NULL;
fp = fopen("input.txt", "r");
if (fp == NULL) {
*sizep = -1;
return NULL;
}
while (fgets(buffer, 5001, fp) != NULL) {
fileArrayPTR = realloc(fileArrayPTR, sizeof(*fileArrayPTR) * (size + 1));
fileArrayPTR[size] = strdup(buffer);
for (int p = 0; p < 5001; p++) {
if (fileArrayPTR[size][p] == '\n') {
fileArrayPTR[size][p] = '\0';
break;
}
}
//printf("%s\n", fileArrayPTR[size]);
size++;
}
*sizep = size;
return fileArrayPTR;
}
int main(void) {
int size;
char **array = getlines(&size);
for (int x = 0; x < size; x++) {
printf("%s\n", array[x]);
}
return 0;
}
请注意,buffer
应定义为5001
,以便与其余代码保持一致。
您可以通过设置传递指针的变量将size
返回到main
,如上所示。