C 终端上的奇怪字符

C 终端上的奇怪字符,c,C,有人能给我解释一下,为什么我会在输出中出现这些奇怪的字符 我得到了这个密码: #include <stdio.h> #include <string.h> int main(int argc, char* argv[]){ if(argc!=2){ printf("Incorrect number of arguments\n"); return -1; } int lenServer=0; int i=0

有人能给我解释一下,为什么我会在输出中出现这些奇怪的字符

我得到了这个密码:

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

int main(int argc, char* argv[]){
    if(argc!=2){
        printf("Incorrect number of arguments\n");
        return -1;
    }
    int lenServer=0;
    int i=0;
    while(argv[1][i]!=':'){
        lenServer++;
        i++;
    }

    char server[lenServer];
    memcpy(server,argv[1],lenServer);

    printf("%s\n",server);
    return 1;

}
我不应该在字符串的末尾加一个NUL(
'\0'
)吗

char server[lenServer+1];
memcpy(server,argv[1],lenServer);
server[lenServer]=0;

服务器
未被
'\0'
终止,并将其声明为
char服务器[lenServer+1],+1表示
'\0'
,那么我该怎么办?这很奇怪,因为如果我放一个printf(“%s\n”,lenServer);就在创建数组服务器[]之前,我得到了它应该得到的结果:在C中,成员字符数组不同于字符串,有效字符串始终是以nul结尾的字符数组,
“%s”
用于打印字符串,在打印字符串之前,必须在
'\0'
作为
服务器[]
中的结束字符,如下所示。确定。成功了。你能给我解释一下服务器[lenServer]=0;这就是不明白。和thx:)@PedroViana例如“ola”,lenServer:3,
charserver[lenServer+1]=>
字符服务器[4]
服务器[0]
o
服务器[1]
l
服务器[2]
a
服务器[3]
\0
nul符号的等效值为
0
,因此在bluepixy的回答中,
服务器[lenServer]=0
服务器[lenServer]='\0'的作用相同两者都是相同的。
char server[lenServer+1];
memcpy(server,argv[1],lenServer);
server[lenServer]=0;