C 需要赋值char f[500];字符*k[500];一个到另一个。

标签 c

所以我有一个程序:

#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
}

因为此内存是mallocd,所以当您不再使用它时,您需要确保释放它。

编辑:如果您的数据是以 null 结尾的字符串,您可以使用 strlen(f) + 1 而不是 sizeof fstrncpy而不是 memcpy。但无论您的 char 数组中存储了什么数据,我的示例都可以正常工作。

关于C 需要赋值char f[500];字符*k[500];一个到另一个。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22208056/

相关文章:

c - c 代码中的段错误需要帮助

c - 使用 OpenSSL API 以编程方式验证证书链

c - do-while 循环不记得 while 中的变量

c++ - ODBC API 查询参数

c - read(2)ing 结构时如何正确避免 "cast increases required alignment"警告?

c - C 中的指针内部结构错误 "' struct.pointer' '.' 意外“

c++ - 如何让 gcc/g++ 接受像 LOBYTE(v15) = someExpression 这样的表达式?

使用 getaddrinfo 编译错误

c - 分配内存并在c中保存字符串

C:如何在特定时区(按偏移量)打印特定的 `time` 值?