C 向量字符奇怪字符

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];

有人知道如何复制字符串吗?因为我使用了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];
    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
的结果未定义

一个更好的解决方案是使用strncat
strncat
,否则您可以不写代码

charresult[150]={'\0'}

这将初始化整个阵列

但是您仍然有溢出
结果
数组的风险。您可以使用更安全的
strncpy
来避免这种情况。更好的方法是使用
snprintf
并让C标准库为您执行连接通过
strcpy(结果、消息)覆盖引入
result
的NUL终止符。因此,后续
strlen
的结果未定义

一个更好的解决方案是使用strncat
strncat
,否则您可以不写代码

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)、消息、服务器);代码>。还要考虑变量的更好名称,它们与提示很不匹配。