繁体   English   中英

如何在c中的3个用户输入字符串中制成字符串

[英]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;
  1. temp_fname是一个数组,在C中,对数组的裸引用将降级为该数组第一个字节的地址。 在设置数组时,在对scanf()的调用中的参数前面加上&无效。
  2. 使用输入格式说明符时: %s和/或%[...]始终包括MAX CHARACTERS修饰符,该修饰符比输入缓冲区的长度小1。 这是因为这两个输入说明符总是将NUL字节附加到输入
  3. 尝试复制字符串时,简单的分配将不起作用。 只会发生的是将源地址复制到目标地址(并且可能会导致编译器输出错误消息),而不是使用分配: 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM