gpt4 book ai didi

c - 简单使用 sprintf 失败

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

如果我跑

filename="heat.dat";
prtdat(u_x_length, u_y_length, u[iz],filename);

它工作正常。如果我将第一行更改为

printf("%d",sprintf(filename,"heat.dat"));

输出是 8,然后我的程序崩溃了。为什么??我的实际目标是使用 sprintf(filename,"heat%dof%d.dat",rank,numtasks)

如果您需要 prtdat 例程,请执行以下操作:

void prtdat(int u_x_length, int u_y_length, float *u, char *fnam) {
int ix, iy;
FILE *fp;

fp = fopen(fnam, "w");
for (iy = 0; iy < u_y_length; iy++)
for (ix = 0; ix < u_x_length; ix++)
{
fprintf(fp, "%6.1f", *(u+iy*u_x_length+ix));
if (ix != u_x_length-1)
fprintf(fp, " ");
else
fprintf(fp, "\n");
}
fclose(fp);
}

最佳答案

"heat.dat" 在您的代码中是一个常量字符串文字。它分配在程序的只读数据段中。因此,您的 filename 指针指向 filename="heat.dat"; 赋值后的只读内存。结果是未定义的行为。为了让您的想法发挥作用,您必须让 filename 指向一个足够大的非常量内存,以存储您试图存储在该内存中的字符串。例如:

char filename[256]; /* This is the key - a non-constant memory is allocated on stack */
printf("%d",sprintf(filename,"heat.dat")); /* sprintf now does not crash */

关于c - 简单使用 sprintf 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13632913/

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