说我有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);
}
答案 0 :(得分:1)
关于发布的代码中的以下(和类似内容)行:
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
)注意:其他编译器使用不同的选项来产生相同的结果
答案 1 :(得分:-1)
如果您不介意,可以张贴完整的代码吗?现在,我假设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/
答案 2 :(得分:-1)
我不确定,但是如果您要创建由前面的字符串的内容组成的第三个字符串,请尝试以下操作:
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);