使用strcat()访问冲突

在我的代码中,我有一个for循环,从某个点开始,从另一个数组中逐个字符连接char。因此,例如,如果文本为“ hi,我需要帮助”,而我的起始索引为10,则将“ help”连接到char * rs的末尾。

for (int l = start_index; l < strlen(text); l++) {
    strcat(rs,"h");
}

我测试了上面的内容,并且工作正常,没有错误,但这

for (int l = start_index; l < strlen(text); l++) {
    strcat(rs,text[l]);
}

没有。根据调试器,“ text”为char [256],而“ rs”为* char,如果有帮助的话。调试器还显示text [l]在该枚举中具有正确的值。

zjtw212 回答:使用strcat()访问冲突

strcat函数使用两个字符串(指向char的指针)作为参数。从上下文来看,text[l]是单个char,无法使用。

解决该问题的一种方法是为该字符创建一个小的单字符临时字符串:

for (int l = start_index; l < strlen(text); l++) {
    char temp[] = { text[l],'\0' };  // Don't forget the terminator
    strcat(rs,temp);
}

另一种解决方案是根本不使用strcat,而是使用rs字符串的索引直接分配给该字符串的元素:

size_t end_of_rs = strlen(rs);
for (int l = start_index; l < strlen(text); l++) {
    rs[end_of_rs++] = text[l];
}
rs[end_of_rs] = '\0';  // Make sure string is terminated

或更简单的解决方案:直接从text连接:

strcat(rs,&text[start_index]);

但是为此,您应该确保start_index不在text的末尾(即,您需要验证start_index < strlen(text))。

本文链接:https://www.f2er.com/3166511.html

大家都在问