gpt4 book ai didi

c - 如何使用 sprintf 在特定位置写入 C 中的 char 数组?

转载 作者:太空宇宙 更新时间:2023-11-04 00:26:09 25 4
gpt4 key购买 nike

我正在尝试将一些用 MATLAB 编写的代码移植到 C 中,以便我可以编译函数并更快地执行它(代码执行非常频繁,它会带来显着的速度提升)。

基本上,我的 MATLAB 代码所做的就是获取一个矩阵并将其转换为字符串,添加方括号和逗号,这样我就可以将其写入文本文件。这是一个关于这如何适用于 vector MyVec 的想法:

MyVec = rand(1,5);
NbVal = length(MyVec)
VarValueAsText = blanks(2 + NbVal*30 + (NbVal-1));
VarValueAsText([1 end]) = '[]';
VarValueAsText(1 + 31*(1:NbVal-1)) = ',';
for i = 1:NbVal
VarValueAsText(1+(i-1)*31+(1:30)) = sprintf('%30.15f', MyVec(i));
end

现在,我怎样才能在 C 中获得类似的结果?这似乎并不太难,因为我可以提前计算出我的字符串(字符数组)的大小,并且我知道我需要写入内存区域的每个元素的位置。 C 中还存在 sprintf 函数。但是,我很难理解如何设置它,还因为我没有一个可以通过反复试验轻松学习的环境(每次尝试我必须重新编译,这通常会导致段错误和 MATLAB 崩溃...)。

我希望有人能提供帮助,即使这个问题可能看起来微不足道,但我对 C 的经验很少,而且我一直无法找到合适的例子......

最佳答案

给定一个字符串的偏移量(以字节为单位),检索指向该偏移量的指针只需使用:

char *ptr = &string[offset];

如果您遍历矩阵的各行以打印它们,您的循环可能如下所示:

char *ptr = output_buffer;
for (i = 0; i < n_lines; i++) {
sprintf (ptr, "...", ...);
ptr = &ptr[line_length];
}

请确保您已为输出缓冲区分配了足够的内存。

关于c - 如何使用 sprintf 在特定位置写入 C 中的 char 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12254384/

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