C 向量字符奇怪字符
有人知道如何复制字符串吗?因为我使用了strcpy函数,但是当我打印结果时,它会显示奇怪的字符。我想连接'name'+'@'+'e-mail'。对于scanf,我必须将字符null“\0”放在一起C 向量字符奇怪字符,c,char,printf,strcpy,C,Char,Printf,Strcpy,有人知道如何复制字符串吗?因为我使用了strcpy函数,但是当我打印结果时,它会显示奇怪的字符。我想连接'name'+'@'+'e-mail'。对于scanf,我必须将字符null“\0”放在一起 #include <stdio.h> #include <string.h> int main (){ char message[150]; char name[150]; char mail[150]; char result[150];
#include <stdio.h>
#include <string.h>
int main (){
char message[150];
char name[150];
char mail[150];
char result[150];
printf("Introduce name: \n");
scanf("%s",message);
printf("Introduce email \n");
scanf("%s",server);
strcpy(result,message);
result[strlen(result)]='@';
strcpy(&result[strlen(result)],server);
printf("RESULT: %s\n",result);
return 0;
}
#包括
#包括
int main(){
字符消息[150];
字符名[150];
字符邮件[150];
字符结果[150];
printf(“介绍名称:\n”);
scanf(“%s”,消息);
printf(“介绍电子邮件”);
scanf(“%s”,服务器);
strcpy(结果、消息);
结果[strlen(result)]='@';
strcpy(&result[strlen(result)],服务器);
printf(“结果:%s\n”,结果);
返回0;
}
result[strlen(result)]='@'代码>通过strcpy(结果、消息)覆盖引入result
的NUL终止符代码>。因此,后续strlen
的结果未定义
一个更好的解决方案是使用strncatstrncat
,否则您可以不写代码
charresult[150]={'\0'}代码>
这将初始化整个阵列
但是您仍然有溢出结果
数组的风险。您可以使用更安全的strncpy
来避免这种情况。更好的方法是使用snprintf
并让C标准库为您执行连接代码>通过strcpy(结果、消息)覆盖引入result
的NUL终止符代码>。因此,后续strlen
的结果未定义
一个更好的解决方案是使用strncatstrncat
,否则您可以不写代码
charresult[150]={'\0'}代码>
这将初始化整个阵列
但是您仍然有溢出结果
数组的风险。您可以使用更安全的strncpy
来避免这种情况。更好的方法是使用snprintf
并让C标准库为您执行连接代码>将删除字符串的0-终止符。您是否尝试过strcat
?这还取决于服务器是什么,以及您是否溢出了缓冲区结果
snprintf(结果,结果大小,“%s@%s”,消息,服务器)
,也就是字符邮件[150]代码>-->字符服务器[150]代码>result[strlen(result)]='@'代码>将删除字符串的0-终止符。您是否尝试过strcat
?这还取决于服务器是什么,以及您是否溢出了缓冲区结果
snprintf(结果,结果大小,“%s@%s”,消息,服务器)
,也就是字符邮件[150]代码>-->字符服务器[150]代码>是,一定要使用snprintf(结果,结果大小,“%s@%s”,消息,服务器)代码>。还考虑变量的更好名称,它们与提示很不匹配。是的,肯定使用<代码> SNPRTNF(结果、SIZEOF结果、%S%%S)、消息、服务器);代码>。还要考虑变量的更好名称,它们与提示很不匹配。