gpt4 book ai didi

C 从文件内容创建字符串,Sedona 根

转载 作者:行者123 更新时间:2023-11-30 19:46:08 25 4
gpt4 key购买 nike

我正在使用一种名为 Sedona 的语言,它可以采用 native C 方法。为了将 C 集成到 sedona,变量声明有点不对劲。

  1. 塞多纳 -> C
    • bool -> int32_t
    • bool [] -> uint8_t*
    • 字节 -> int32_t
    • 字节[] -> uint8_t*
    • 短 -> int32_t
    • 短[] -> uint16_t*
    • int -> int32_t
    • int[] -> int32_t*
    • 长 -> int64_t
    • long[] -> int64_t*
    • float -> float
    • 浮点[] -> 浮点*
    • 双 -> 双
    • 双[] -> 双*
    • 对象 -> void*
    • Obj[] -> void**
    • Str -> uint8_t*
    • Str[] -> uint8_t**

我的方法正在尝试打开一个文件,读取其内容并将文件内容作为字符串返回以供其他 Sedona 方法使用。我知道你们大多数人可能不了解 Sedona,但它要么没有正确返回字符串,要么没有正确构建它,要么没有正确创建它。

#include <stdio.h>
#include "sedona.h"

Cell lynxspringWeblet_MainWeblet_getFile(SedonaVM* vm, Cell* params){
Cell result;
int64_t size;
uint8_t* fileContents;
int32_t itter = 0;
uint8_t* ch;
uint8_t* file_name = params[0].aval;
FILE *fp;
fp = fopen(file_name, "r"); //read mode
fseek(fp, 0L, SEEK_END);
size = ftell(fp);
fseek(fp, 0L, SEEK_SET);
fileContents = (uint8_t*)malloc(sizeof(char)*size);

if (fp==NULL){
perror("Error while opening the file.\n");
exit(1);
}

ch = "l";
while ((*ch = fgetc(fp))!=EOF){
fileContents[itter] = *ch;
itter++;

}
result.aval = fileContents;
fclose(fp);
return result;
}

它正在编译,但 SVM 崩溃了,我已将范围缩小到存在问题的 while 循环。我认为我没有正确构建字符串。它可以编译,所以我知道没有明显的错误,但它仍然无法正常工作。

谁能告诉我

1)这当前正在做什么?

2)有更好的方法吗?

最佳答案

我怀疑问题出在这里:

ch = "l";
while ((*ch = fgetc(fp))!=EOF) {
....
}

您正在将 ch 指定为指向字符串文字的指针。并且字符串文字是不可修改的。您立即尝试修改字符串文字。

我猜 fgetc 返回一个 int32_t,遵循您的类型映射。在这种情况下,您应该将 ch 更改为 int32_t 类型,并像这样编写循环:

while ((ch = fgetc(fp))!=EOF) {
....
}

另一方面,也许类型映射需要在其他地方发生,也许您应该使用 int。但可以肯定的是,由于 Chris 概述的原因,您不能使用 uint8_t

请注意,我对塞多纳一无所知,因此预计其中一些细节会出错。

关于C 从文件内容创建字符串,Sedona 根,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24496808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com