【发布时间】:2021-08-03 16:45:15
【问题描述】:
我正在尝试将一个空的字符串数组解析为一个函数,该函数用一些字符串数据填充数组。然后使用该函数之外的字符串数组。
下面是我正在尝试做的示例代码。
#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
【问题讨论】:
-
readBuffer[i] = &buffer;那是存储对局部变量的引用。该变量仅在循环的每次迭代中有效。您需要分配具有超出函数生命周期的动态内存。例如readBuffer[i] = strdup(buffer);。不要忘记当不再需要时需要释放内存。
标签: arrays c function scope c-strings