如何将字符串数组解析为c中的函数
How to parse a string array to a function in c
我试图将一个空字符串数组解析为一个函数,该函数用一些字符串数据填充该数组。然后在该函数外使用字符串数组。
下面是我正在尝试执行的示例代码。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define READLENGTH 155
#define READLISTLENGTH 100
void fileReader(char *readBuffer[]) {
for (int i=0;i<100;i++) {
char buffer[50];
snprintf(buffer, 20, "hello world %d",i);
readBuffer[i] = &buffer;
}
}
int main()
{
char *readBuffer[READLISTLENGTH];
fileReader(readBuffer);
for(int i = 0; i < READLISTLENGTH; i++) {
printf("%s \n",readBuffer[i]);
}
}
预期输出是,
hello world 0
hello world 1
hello world 2
:
:
hello world 99
但我得到的是,
hello world 99
hello world 99
hello world 99
:
:
hello world 99
您声明了一个未初始化的指针数组
char *readBuffer[READLISTLENGTH];
在函数 fileReader 中,您将同一本地数组的地址 buffer
分配给传递的数组的元素。
char buffer[50];
snprintf(buffer, 20, "hello world %d",i);
readBuffer[i] = &buffer;
退出函数后,数组的元素将是无效指针,因为数组 buffer
将不存在。
此外,编译器应该为这个赋值发出消息
readBuffer[i] = &buffer;
因为操作数的类型不兼容。至少你应该写
readBuffer[i] = buffer;
在任何情况下,您都需要声明一个二维字符数组,例如
char readBuffer[READLISTLENGTH][50];
(在这种情况下,函数声明应更改)或在函数内 fileReader
您需要为指针数组的每个元素动态分配内存并从本地数组复制输入的字符串 buffer
到分配的内存中。
我试图将一个空字符串数组解析为一个函数,该函数用一些字符串数据填充该数组。然后在该函数外使用字符串数组。
下面是我正在尝试执行的示例代码。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define READLENGTH 155
#define READLISTLENGTH 100
void fileReader(char *readBuffer[]) {
for (int i=0;i<100;i++) {
char buffer[50];
snprintf(buffer, 20, "hello world %d",i);
readBuffer[i] = &buffer;
}
}
int main()
{
char *readBuffer[READLISTLENGTH];
fileReader(readBuffer);
for(int i = 0; i < READLISTLENGTH; i++) {
printf("%s \n",readBuffer[i]);
}
}
预期输出是,
hello world 0
hello world 1
hello world 2
:
:
hello world 99
但我得到的是,
hello world 99
hello world 99
hello world 99
:
:
hello world 99
您声明了一个未初始化的指针数组
char *readBuffer[READLISTLENGTH];
在函数 fileReader 中,您将同一本地数组的地址 buffer
分配给传递的数组的元素。
char buffer[50];
snprintf(buffer, 20, "hello world %d",i);
readBuffer[i] = &buffer;
退出函数后,数组的元素将是无效指针,因为数组 buffer
将不存在。
此外,编译器应该为这个赋值发出消息
readBuffer[i] = &buffer;
因为操作数的类型不兼容。至少你应该写
readBuffer[i] = buffer;
在任何情况下,您都需要声明一个二维字符数组,例如
char readBuffer[READLISTLENGTH][50];
(在这种情况下,函数声明应更改)或在函数内 fileReader
您需要为指针数组的每个元素动态分配内存并从本地数组复制输入的字符串 buffer
到分配的内存中。