Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何打印此字符串_C - Fatal编程技术网

C 如何打印此字符串

C 如何打印此字符串,c,C,我有一根这样的绳子 char array1[250] = {"Array Values are %d,%d,%d,%d"}; 我有四个这样的整数 int var1 = 25,var2 = 78, var3 = -189,var4 = -200; 我想在数组1中打印var1到var4。我该怎么做?我已经在array1本身中有了格式说明符 简单地使用 但是要创建另一个输出数组,否则会有未定义的行为,因为您覆盖了格式字符串 char output[126]; sprintf(output, ar

我有一根这样的绳子

char array1[250] = {"Array Values are %d,%d,%d,%d"};
我有四个这样的整数

int var1 = 25,var2 = 78, var3 = -189,var4 = -200;
我想在数组1中打印var1到var4。我该怎么做?我已经在array1本身中有了格式说明符

简单地使用

但是要创建另一个输出数组,否则会有未定义的行为,因为您覆盖了格式字符串

char output[126];

sprintf(output, array1, var1, var2, var3, var4);
1、阵列1、阵列1、阵列2、阵列3、阵列4

是的。但是我不确定C对同时读写同一个字符串会有什么反应,强烈建议您先将它复制到一个单独的变量中


编辑:根据罗迪的评论,我只想说,不要做你要求做的事。格式说明符应该与数据分开,我确信您在其中使用的应用程序可以为良好的设计留出25个字节。

不要将格式说明符放入数组中。照办

char array1[128]; // enough space for four ints and the string

sprintf(array1, "Array Values are %d,%d,%d,%d", var1, var2, var3, var4);

您有overlap=>未定义的行为。我99%确定它不能工作,因为sprintf没有创建格式字符串的临时副本。给定示例值,它还将写入超过数组末尾的内容,并且-仅限于此-文字字符串可能存储在内存的只读部分。@Roddy:它被分配给了一个字符数组,所以文字不是问题。您提到的所有其他内容都是。您有重叠=>未定义的行为。@nneoneo-您是对的。我认为char*而不是char[]@Roddy这里没有字符串文字;因此,您的数组需要为33字节或更大才能有效。对于这个问题的一些答案,请回答:From:如果由于调用sprintf或snprintf而在重叠的对象之间发生复制,则结果未定义。好建议,先生,但是我想用我说的方式,你正在尝试写入你的格式字符串,正如阿洛克已经指出的,它是UB。这确实是最简单的方法。如果要在变量中使用格式字符串,请为格式字符串定义一个单独的变量。@user1293997在这种情况下,请使用临时数组。