如何解决字符串复制不适用于旋转字符串数组的数组
我有一个字符串数组,用 C 编写作为全局变量:
static char strList[10][20][30]; /* Used 10,20,30 for easier comunication */
将存储这样结构的内容(实际内容各不相同)
[["word1","word2",...,"word20" ],/* line 1 */
["ward1","wsrd2","wdrd20" ],/* line 2 */
...
["wasd1","qwer2","uijk20" ]] /* line 10 */
我想要一个旋转函数,将第 1 行移动到第 2 行,将第 2 行移动到第 3 行......并丢弃第 10 行。我是这样写的:
void rotateList(){
int i,j;
for(j = 10-2; j >0; j--){
for(i = 0; i < 20; i++){
strcpy(strList[j+1][i],strList[j][i]);
/* Copy lower index into higher ones? */
}
strcpy(strList[j+1][i+1],"\0");
}
}
它编译并运行,但似乎没有复制。第 1 行中的内容没有移动到第 2 行中,而是变成了空列表。
可能有什么问题? 谢谢。
解决方法
循环不正确:您没有在末尾重置第一行,而是在每次迭代时访问当前行末尾之外的字符串。
这是修改后的版本:
#include <string.h>
static char strList[DIM1][DIM2][DIM3];
void rotateList() {
for (size_t j = DIM1; j --> 1; ) {
for (size_t i = 0; i < DIM2; i++) {
strcpy(strList[j][i],strList[j - 1][i]);
}
}
/* reset the first row */
for (size_t i = 0; i < DIM2; i++) {
strList[0][i][0] = '\0';
}
}
请注意,使用大量块复制可能会获得更好的性能:
void rotateList() {
memmove(strList[1][0],strList[0][0],sizeof(strList) - sizeof(strList[0]));
memset(strList[0][0],sizeof(strList[0]));
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。