在下面的函数中,我似乎在退出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循环中创建了它自己的本地副本,或者我在某个地方遗漏了引用/解引用。我希望有人能澄清一下。输出在下面的屏幕截图中。对输出屏幕截图的质量表示歉意。我不得不用我的电话发邮件。
1条答案
按热度按时间mfpqipee1#
我刚刚有机会正确地计算出这个函数,并希望给予一个解释,以防任何人在未来偶然发现这个。
当我写这段代码的时候,我不明白如何通过加0来转换字符。现在我明白了,我们实际上并没有加0。我们加了值48,因为这是0的ASCII数字/索引。所有这些都是由于字符被c保存为整数。