如何解决尝试将单个字符转换为 char* 数组时出错
你好,新年快乐!
我在尝试解决递归问题,如下所示。我已经设法让它工作了,但是我想使用的另一种方法不起作用(工作行被注释掉了)。
我无法将单个 char
附加到 char*
数组 - 编译器给出错误 'Unable to convert const char to char'
我尝试将 x1
声明为类似 char[1]
的数组。我不能将 x1,x2 声明为 char*
,因为它们输入到 bigram
函数中,该函数专门通过引用获取 char。
任何帮助将不胜感激。非常感谢。
void encode(char square[6][6],char* prepared,char* encoded){
// EXIT CONDITION:
if (strlen(prepared) == 0) {encoded[0] ='\0'; return;}
encode(square,++++prepared,++++encoded);
char x1
char x2;
bigram(square,prepared[0],prepared[1],x1,x2);
// bigram(square,encoded[0],encoded[1]); << WORKS
strcat(prepared,x1); // << DOES NOT WORK with 'cannot convert const char* to char*' error
strcat(prepared,x2); // << does not work
}
// I have to pass the chars by reference here per problem statement
bool bigram(char square[6][6],char inchar1,char inchar2,char& outchar1,char& outchar2){
/* some calcs which compute outchar1,outchar2 */
}
解决方法
要将单个字符附加到字符串,有多种方法。字符串内存管理也需要考虑,通常会提示最好的方法。
char* append(size_t sz,char *s,char ch) {
size_t len = strlen(s);
if (len + 1 >= sz) {
fprintf(stderr,"Insufficient room\n");
return NULL;
}
// Append via `len`
s[len++] = ch;
s[len] = '\0';
// OR
// strcat with compound literal
strcat(s,(char[2]) {ch});
return s;
}
因为 OP 想要附加 2 个字符:
char* append2(size_t sz,char ch1,char ch2) {
size_t len = strlen(s);
if (len + 2 >= sz) {
fprintf(stderr,"Insufficient room\n");
return NULL;
}
// Append via `len`
s[len++] = ch1;
s[len++] = ch2;
s[len] = '\0';
// OR
// strcat with compound literal
strcat(s,(char[3]) {ch1,ch2});
return s;
}
迂腐:附加一个空字符是一种特殊情况,上面没有详述。
,已解决(谢谢@pmg !!)
就这么简单,而不是两个 strcat。 Strcats 不能处理单个字符 - 他们必须在 RHS 上使用 char*:
*encoded++ = x1;
*encoded++ = x2;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。