我有一个字符串数组的数组,用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 */我想要有一个旋转函数,将第一行移动到第二行,第二行移动到第三行。然后丢弃第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行,而是列表变为空。
可能出了什么问题?谢谢。
发布于 2021-03-12 06:23:55
循环是不正确的:您没有重置末尾的第一行,而是在每次迭代时访问当前行末尾之外的字符串。
以下是修改后的版本:
#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], 0, sizeof(strList[0]));
}https://stackoverflow.com/questions/66591335
复制相似问题