连接C字符串

时间:2015-12-08 12:23:48

标签: c arrays string strcat

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <string.h>
    int main(void){ 
    char pos[4][4];
    char loc[4];
    int i;

    for(i=0;i<4;i++){
        pos[i][0]=4;
        pos[i][1]=4;
        pos[i][2]=4;
        pos[i][3]=4;
    } loc[i]=" ";
    strcat(loc[i],pos[i]);
}

我试图在连接中保存pos [i]的所有内容 串。我不知道该如何解决这个问题。我会很感激任何提示。

1 个答案:

答案 0 :(得分:0)

改编代码:

#include <stdio.h>
#include <string.h>

int main(void) {
    char pos[4][4];
    char *loc;
    int i;

    for (i = 0; i < 4; i++) {
        pos[i][0] = 'a' + i;
        pos[i][1] = 'a' + i;
        pos[i][2] = 'a' + i;
        pos[i][3] = 'a' + i;
    };

    loc = (char *) pos;
    for (i = 0; i != sizeof(pos); i++) {
        fputc(loc[i], stdout);
    }
    fputc('\n', stdout);
    /* output: aaaabbbbccccdddd */

    return 0;
}

pos已经是您正在寻找的连接。

pos是连续字符的内存块的地址 并且可以通过这种方式声明和初始化:

char pos[4][4] = {
    { 'a', 'a', 'a', 'a' }
  , { 'b', 'b', 'b', 'b' }
  , { 'c', 'c', 'c', 'c' }
  , { 'd', 'd', 'd', 'd' }
};

或这种方式(编译器可能发出警告):

char pos[4][4] = {
    'a', 'a', 'a', 'a'
  , 'b', 'b', 'b', 'b'
  , 'c', 'c', 'c', 'c'
  , 'd', 'd', 'd', 'd'
};

这两个维度只是pos的视图,可以展平:(char *) pos

如果您需要拼合副本:

char cpy[sizeof(pos)];
memcpy(cpy, pos, sizeof(pos));