我有以下字符串tok_str,它类似于“default.png”我想预先渲染char'并附加char'。
这就是我所做的,但是这些字符会被附加并隐藏在错误的地方
char *tok_str = const_cast<char*>(mReader->getAttributeValue(pAttrIdx));
char * mod_tok = new char[tok_str_len+2];
mod_tok[0] = '\'';
size_t len = strlen(tok_str);
size_t i;
memmove(mod_tok + len, mod_tok, strlen(mod_tok) + 1);
for (i = 0; i < len; ++i)
{
mod_tok[i] = tok_str[i];
}
char *dup;
char *cstr="'";
sprintf(mod_tok,"%s%s",cstr,(dup=strdup(mod_tok)));
free(dup);
答案 0 :(得分:1)
如果你想继续使用以null结尾的字节字符串,你需要考虑和做一些事情。
第一个当然是 以null结尾的 部分。 X字符串需要X + 1空间才能包含终止符。
第二个是你需要的只是一个sprintf
(或更好的snprintf
)调用(一旦你分配了内存):
char* mod_tok = new char[strlen(tok_str) + 3]; // +2 for the extra characters, +1 for terminator
snprintf(mod_tok, strlen(tok_str) + 3, "'%s'", tok_str);
就是这样,现在你已经在原始字符串的前面和末尾添加了单引号。
答案 1 :(得分:0)
有几点需要改进:
这是我的建议:
//keep it const and protect your data
const char *tok_str = mReader->getAttributeValue(pAttrIdx);
//retrive the len once for all (const, no one is supposed to change it)
const size_t len = strlen(tok_str);
char * mod_tok = new char[len+3]; // 2 "'" + '\0'
mod_tok[0] = '\'';
for (size_t i = 0; i < len; ++i)
{
mod_tok[i+1] =tok_str[i];
}
mod_tok[len+1] = '\'';
mod_tok[len+2] = '\0';
//done.
//later...
delete[] mod_tok;
享受您的编码! 斯特凡诺 PS:我同意,建议使用std :: string。