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

Fed*_*ico 1 c arrays string matlab printf

我试图将一些用MATLAB编写的代码移植到C,以便我可以编译该函数并更快地执行它(该代码经常执行,这将显着提高速度)。

因此,基本上我的MATLAB代码会执行此操作,它需要一个矩阵并将其转换为字符串,并添加方括号和逗号,因此可以将其写入文本文件。这是一个如何对向量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
Run Code Online (Sandbox Code Playgroud)

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

我希望即使问题看起来很简单也能有所帮助,但是我对C的经验很少,而且我无法找到合适的示例作为起点...

小智 5

给定字符串的偏移量(以字节为单位),只需使用以下命令即可获取指向此偏移量的指针:

char *ptr = &string[offset];
Run Code Online (Sandbox Code Playgroud)

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

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

但是,请确保为输出缓冲区分配了足够的内存。