代码之家  ›  专栏  ›  技术社区  ›  Amarth Gûl

字符串复制不适用于旋转字符串数组

  •  1
  • Amarth Gûl  · 技术社区  · 4 年前

    我有一个字符串数组,用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 */
    

    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 回复  |  直到 4 年前
        1
  •  2
  •   chqrlie    4 年前

    循环是不正确的:您没有重置结尾处的第一行,而是在每次迭代时访问当前行结尾以外的字符串。

    #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]));
    }