所以我有一个程序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char kazkas;
char f[500];
char *k[500];
int x=0;
int o = 0;
int i=0;
memset(f, 0, 255);
memset(k, 0, 255);
int len = 0;
int par = 0;
FILE *fp;
if((fp=fopen("tekstas.txt", "r"))== NULL){
printf("failo \n ddd \t ddd");
exit(1);
}
else {
kazkas = fgetc(fp);
while(!feof(fp))
{
kazkas = fgetc(fp);
len = strlen(f);
f[len + 1] = f[len];
f[len] = kazkas;
if(kazkas == '\t')
{
k[i] = f;
i++;
memset(f, 0, 255);
par++;
}
}
}
printf("%s", k[0]);
return 0;
}
不要看整个代码,你不需要它。东西在
if(kazkas == '\t')
{
k[i] = f;
i++;
memset(f, 0, 255);
par++;
}
当我找到一个 '\t' 符号时,我想将我所有的 f(我一直在阅读的东西)转移到我的 k[i] 数组并将 f 设置为零,以便我可以扫描其他段落。 k[i] = f;如果我写 k[0] = "SOMETHING"; 就不起作用了;它会工作..有什么问题?我应该如何将 f 转换为 k[i] ?
最佳答案
您需要为 k[i]
分配一个新的内存块来指向。正如您所拥有的那样,f
只指向一个 500 char
长的位置,并且不断被重用。为避免覆盖您尝试存储的数据,请尝试以下方法:
if (kazkas == '\t')
{
char *new = malloc(sizeof f);
memcpy(new, f, sizeof f);
k[i] = new;
//f has been safely copied over and can be re-used
}
因为此内存是malloc
d,所以当您不再使用它时,您需要确保释放
它。
编辑:如果您的数据是以 null 结尾的字符串,您可以使用 strlen(f) + 1
而不是 sizeof f
和 strncpy
而不是 memcpy
。但无论您的 char 数组中存储了什么数据,我的示例都可以正常工作。
关于C 需要赋值char f[500];字符*k[500];一个到另一个。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22208056/