有人能帮我弄明白为什么我的数组中会有垃圾值吗?我的代码是:
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
,我又如何返回大小呢? 最佳答案
应该重新分配字符串数组,以便在读取更多行时将其增大:
#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
,如上图所示。关于c - 动态数组中的垃圾值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35677813/