[英]How to make a string out of 3 user input strings in c
说我有3个字符串:
char a[9];
char b[20];
char c[20];
考虑到a,b和c是用户输入的,我将如何创建由先前字符串的内容组成的第三个字符串。 当我将strcpy与a一起使用,然后将strcat与b和c一起使用,然后输出结果字符串d时,我得到了垃圾字符。 这与每个字符串的NULL终止符有关还是我做错了其他事情? 谢谢
编辑:
void getBasicDetails(char date_of_birth[9], char first_name[20],
char last_name[20])
{
char temp_dob[9];
char temp_fname[20];
char temp_lname[20];
char file_name[50];
int stop = 1;
printf("Patient's Date of Birth (in format dd/mm/yy) : "); // 2 and 5
while (stop == 1)
{
scanf("%s", &temp_dob);
emptyBuffer();
if ((temp_dob[2] == '/' && temp_dob[5] == '/'))
{
stop = 0;
break;
}
else
{
printf("Enter in format dd/mm/yy\n");
}
}
date_of_birth = temp_dob;
date_of_birth[9] = '\0';
printf("Patient's First Name : ");
scanf("%s", &temp_fname);
emptyBuffer();
first_name = temp_fname;
first_name[20] = '\0';
printf("Patient's Last Name : ");
scanf("%s", &temp_lname);
emptyBuffer();
last_name = temp_lname;
last_name[20] = '\0';
strcat(file_name, first_name);
strcat(file_name, last_name);
strcat(file_name, date_of_birth);
puts(file_name);
}
关于发布的代码中的以下(和类似内容)行:
scanf("%s", &temp_fname);
....
first_name = temp_fname;
temp_fname
是一个数组,在C中,对数组的裸引用将降级为该数组第一个字节的地址。 在设置数组时,在对scanf()
的调用中的参数前面加上&
无效。 %s
和/或%[...]
始终包括MAX CHARACTERS修饰符,该修饰符比输入缓冲区的长度小1。 这是因为这两个输入说明符总是将NUL字节附加到输入 strcpy()
或strncpy()
编译时,请始终启用警告,然后修复这些警告。 至少要使用gcc
: -Wall -Wextra -Wconversion -pedantic -std=gnu11
)注:其他编译器使用不同的选项来产生相同的结果
如果您不介意,可以张贴完整的代码吗? 现在,我假设a,b和c都包含一些字符串,而d为空。
char a[9];
char b[20];
char c[20];
char d[60];
strcpy (b);
strcpy (a);
strcpy (c);
strcpy (d);
strcat (d, a);
strcat (d, b);
strcat (d, c);
puts(d);
printf(d);
另外,您可以利用sprintf函数执行相同的操作:
sprintf(d, "%s%s%s", a, b, c)
如果我做的正确,这应该返回您想要的正确结果。 有关strcat()的更多信息,请检查以下链接: https : //www.tutorialspoint.com/c_standard_library/c_function_strcat.htm
有关sprintf()的更多信息,请检查以下链接: https : //www.geeksforgeeks.org/sprintf-in-c/
我不确定,但是如果您要创建由先前字符串的内容组成的第三个字符串,请尝试以下操作:
char str1[100];
char str2[100];
char str3[100];
printf("Enter String1: \n");
gets(str1);
printf("\Enter String2:\n");
gets(str2);
strcpy(str3,str1);
strcat(str3,str2);
printf("String 3: %s", str3);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.