strcat() 的访问冲突

Access violation with strcat()

在我的代码中,我有一个 for 循环,用于从某个点开始从另一个数组逐个字符地连接字符。因此,例如,如果文本是 "hi i need help" 并且我的起始索引是 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] 在该枚举中具有正确的值。

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

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

for (int l = start_index; l < strlen(text); l++) {
    char temp[] = { text[l], '[=10=]' };  // 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] = '[=11=]';  // Make sure string is terminated

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

连接
strcat(rs, &text[start_index]);

但是为此你应该确保 start_index 没有超出 text 的结尾(即你需要验证 start_index < strlen(text))。