c - 使用for循环在字符数组中保存数字时数字被截断

标签 c

我正在尝试创建一个函数来计算帕斯卡三角形的行并创建一个字符串来保存它。一切正常,直到列包含 2 位数字。然后,第二个数字被截断。

但是,当我单独使用 sprintf 函数时,没有 for 循环或 if else 语句,数字被正确保存。

char* pascal( int* n ) {

       int r = *n;
       int t = 0;
       int i;

       char res[MAX];

       for ( t = *n, i = 0; t >= 0; t--, i++ ) {
               if ( t == *n || t == 0 ) {
                       sprintf(&res[i], "%d", 1);
               } else {
                       sprintf(&res[i], "%d", fact(r)/(fact(t) * fact((r - t)));
               }
         }

         char* output = res;

         return output;

}

当我在函数中输入 5 时,我得到: 151151

我的期望: 15101051

每个 pascal 行都是一样的,它的列包含 2 位或更多位的数字。

最佳答案

sprintf 返回“输出”的字符数。在 i++ 中将返回值添加到 i 而不是:

i += sprintf(&res[i], "%d", ...);

关于c - 使用for循环在字符数组中保存数字时数字被截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58421671/

相关文章:

c - 为什么增加进程数不会减少此并行代码的执行时间?

c - 使用 clock() 获取时间戳(Visual Studio 2010,C/C++)

c - "Fixing"C中的大角度

c - 存储文件夹的路径

c - fscanf 仅获取十六进制数的前 4 个字节

C语言——从目标文件中调用函数

php - 在 php 扩展中评估 php 代码

c - 初始化一个二维字符串数组并打印

c++ - C 中的文件处理读取多个字符

将十六进制转换为 Ascii 内存访问