以下代码根据以下内容生成文件名:目标目录,电台名称和当前时间:
static int start_recording(const gchar *destination, const char* station, const char* time)
{
Recording* recording;
char *filename;
filename = g_strdup_printf(_("%s/%s_%s"),
destination,
station,
time);
recording = recording_start(filename);
g_free(filename);
if (!recording)
return -1;
recording->station = g_strdup(station);
record_status_window(recording);
run_status_window(recording);
return 1;
}
输出示例:
/home/ubuntu/Desktop/Europa FM_07042012-111705.ogg
问题:
同一电台名称可能在标题中包含空格:
Europa FM
Paprika Radio
Radio France Internationale
...........................
Rock FM
我想帮助我从生成的文件名中删除空格 输出变为:
/home/ubuntu/Desktop/EuropaFM_07042012-111705.ogg
(更复杂的要求是从文件名中删除所有非法字符)
谢谢。
更新
如果写下这个:
static int start_recording(const gchar *destination, const char* station, const char* time)
{
Recording* recording;
char *filename;
char* remove_whitespace(station)
{
char* result = malloc(strlen(station)+1);
char* i;
int temp = 0;
for( i = station; *i; ++i)
if(*i != ' ')
{
result[temp] = (*i);
++temp;
}
result[temp] = '\0';
return result;
}
filename = g_strdup_printf(_("%s/%s_%s"),
destination,
remove_whitespace(station),
time);
recording = recording_start(filename);
g_free(filename);
if (!recording)
return -1;
recording->station = g_strdup(station);
tray_icon_items_set_sensible(FALSE);
record_status_window(recording);
run_status_window(recording);
return 1;
}
收到此警告:
警告:传递'strlen'的参数1使得整数指针没有强制转换[默认启用] 警告:赋值使整数指针没有强制转换[默认启用]
答案 0 :(得分:1)
如果您可以修改名称,可以使用以下内容:
char *remove_whitespace(char *str)
{
char *p;
for (p = str; *p; p++) {
if (*p == ' ') {
*p = '_';
}
}
}
如果没有,只需malloc另一个相同大小的字符串,将原始字符串复制到其中并在使用后将其释放。
答案 1 :(得分:1)
void remove_spaces (uint8_t* str_trimmed,
const uint8_t* str_untrimmed)
{
size_t length = strlen(str_untrimmed) + 1;
size_t i;
for(i=0; i<length; i++)
{
if( !isspace(str_untrimmed[i]) )
{
*str_trimmed = str_untrimmed[i];
str_trimmed++;
}
}
}
删除空格,新行,制表符,回车等。 请注意,这也会复制空终止字符。