从终端通过管道传输到 C 程序的文件获取信息



一个包含一堆数字的文件将被管道传输到程序中:

./executable < file.txt

我需要将该文件的内容存储在动态分配的 int 指针数组中,并搜索它以查找最大数字。 我用了fgets(),但这使用的是字符而不是整数。

有什么办法可以做到这一点吗?

这是获取输入的代码,但这并没有真正按照我想要的方式工作:

#define MAX 100                                                                 
             
int main(int argc, char* argv[])                                                
{                                                                               
int i;                                                                      
char *buffer = malloc(sizeof(char) * MAX);                                  
fgets(buffer, MAX, stdin);                                                    
} 

编辑:我试过这个,但它显示值为 0。 (该文件正好有 24 个数字,每个数字都在新行上,后面没有空格(

#include <stdio.h>                                                              
#include <stdlib.h>                                                                                                                         
#define MAX 24                                                                  
            
int main(int argc, char* argv[])                                                
{                                                                               
int i, *ptr;                                                                
int *values = malloc(sizeof(int) * MAX);                                    
ptr = &values[0];                                                           
            
for (i = 0; i < MAX; i++) {                                                 
scanf("%d", &ptr);                                                      
ptr++;                                                                  
}                                                                           
             
ptr = &values[0];                                                           
for (i = 0; i < MAX; i++) {                                                 
printf("%dn", *(ptr + i));                                             
}                                                                           
             
free(values);                                                               
return EXIT_SUCCESS;                                                        
}

我现在会尝试fread,看看我是否能弄清楚。

我猜问题是你读&ptr.ptr是指向int的指针,因此您需要读取它,而不是读取其地址。

实际代码:

#include <stdio.h>                                                              
#include <stdlib.h>                                                                                                                         
#define MAX 24                                                                  
            
int main(int argc, char* argv[])                                                
{                                                                               
int i, *ptr;                                                                
int *values = malloc(sizeof(int) * MAX);                                    
ptr = values;                                                           
            
for (i = 0; i < MAX; i++) {                                                 
scanf("%d", ptr);                                                      
ptr++;                                                                  
}                                                                           
             
ptr = values;                                                           
for (i = 0; i < MAX; i++) {                                                 
printf("%dn", ptr[i]);                                             
}                                                                           
             
free(values);                                                               
return EXIT_SUCCESS;                                                        
}

这是最终对我有用的:

#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#define INIT_MAX 5
int main(int argc, char* argv[])                                                
{                                                                               
int size, total, run, i;
int *values = malloc(sizeof(int) * INIT_MAX);
int *ptr;
size = INIT_MAX;
total = 0;
ptr = &values[0];
run = scanf("%d", ptr);
while (run == 1) {
total += 1;
ptr++;
if (total > size - 3) {
values = (int *) realloc(values, sizeof(int) * (size * 2));
size *= 2;
ptr = &values[total];
if (values == NULL) {
printf("Could not allocate memoryn");
return EXIT_FAILURE;
}
}
run = scanf("%d", ptr);
}

ptr = &values[0];
for (i = 0; i < total; i++) {
printf("%dn", *(ptr + i));
}

return EXIT_SUCCESS;                                                        
}

弄清楚 realloc(( 很棘手,因为我没有意识到每次重新分配内存时,我的int *ptr都会遇到问题并搞砸一切。

最新更新