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;