在退出c中的for循环后,我似乎丢失了字符串的结尾,

zbdgwd5y  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(99)

在下面的函数中,我似乎在退出for循环后丢失了字符串的结尾。如果有任何帮助,我将不胜感激。

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <stdint.h> 

char  *get_out_file_name(int in_file_num);

int main(int argc, char *argv[])
{
    char* file_name = get_out_file_name(37);
    printf("name_final = %s \n", file_name);
    free (file_name);
}
char *get_out_file_name(int in_file_num) 
 { 
     const int max_name_length = 3; 
     const int file_type_length = 4; 
     const char *type_suffix; 
     type_suffix = ".jpg"; 
     int num_remainder = in_file_num; 
     char * name_final = malloc(sizeof(char) * (max_name_length + file_type_length + 1));
    for (int i = max_name_length - 1; i >= 0 ; i --) 
     { 
         printf("i = %d\n",i); 
        name_final[i] = num_remainder % 10; 
        sprintf (&name_final[i], "%d", name_final[i]);
         printf("name_final[i] = %c \n", name_final[i]);
         num_remainder /= 10; 
     } 
    printf("pre concat[1] = %c \n",name_final[1]);
     strcat(name_final, type_suffix); 
   //  printf("name_final %s \n", name_final); 
     return name_final; 
}

保留数据的唯一位置是name_final[0],数组索引1和2在for循环退出后没有保存任何数据。我想可能是sprintf在for循环中创建了它自己的本地副本,或者我在某个地方遗漏了引用/解引用。我希望有人能澄清一下。输出在下面的屏幕截图中。对输出屏幕截图的质量表示歉意。我不得不用我的电话发邮件。

mfpqipee

mfpqipee1#

我刚刚有机会正确地计算出这个函数,并希望给予一个解释,以防任何人在未来偶然发现这个。
当我写这段代码的时候,我不明白如何通过加0来转换字符。现在我明白了,我们实际上并没有加0。我们加了值48,因为这是0的ASCII数字/索引。所有这些都是由于字符被c保存为整数。

相关问题