【发布时间】:2021-08-26 08:41:39
【问题描述】:
我有以下函数,当从 main 调用时,当给定一个 int 时,它会返回一个格式化的文件名 (000.jpg) 作为字符串。 (我知道我们可以为此使用 sprintf)
在主要作品中初始化char fn[8] = "000.jpg"。
当传递到函数 getfilename() 时,
分配 indiv 字符,例如fn[4] = 'p'; 工作,
但如果我分配 fn = "000.gif"; 它将不起作用
我收到 Bus error: 10
我做错了什么?
(其余代码工作正常,只要我不这样做,输出就是正确的:fn = "000.gif";
但我想学习如何在跨函数传递时操作字符串)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
char *getfilename(int counter, char *fn);
int main(void) {
int counter=14;
char fn[8]= "000.jpg"; // this is fine
getfilename(counter, fn);
printf("%s\n", fn);
}
char *getfilename(int counter, char *fn) {
fn[7] = '\0';
fn[4] = 'p'; // this is fine
fn[5] = 'n';
fn[6] = 'g';
//fn = "000.gif"; // this will return Bus error: 10
// ITOA IMPLEMENTATION FOR 3-DIGIT FILENAME
int numOfDigits = log10(counter) + 1;
for (int i=numOfDigits-1; i>=0; i--, counter/=10) {
if (numOfDigits==1) {
fn[i+2] = (counter % 10) + '0';
fn[0] = fn[1] = '0';
}
else if (numOfDigits==2) {
fn[i+1] = (counter % 10) + '0';
fn[0] = '0';
}
else {
fn[i] = (counter % 10) + '0';
}
}
//////////
return fn;
}
【问题讨论】:
标签: c pointers undefined-behavior c-strings string-literals