【问题标题】:How to concate string using strcat() [duplicate]如何使用 strcat() 连接字符串 [重复]
【发布时间】:2019-03-11 04:40:01
【问题描述】:

此代码想要连接字符串,但不显示输出

#include<stdio.h>
#include<string.h>
main( ) 
    {  
    char *str1 = "United" ;  
    char *str2 = "Front" ;  
    char *str3 ;  
    str3 = strcat ( str1, str2 ) ;  
    printf ( "\n%s", *str3 ) ; 
    }

【问题讨论】:

  • 打开编译器的警告,它会告诉你哪里出了问题。
  • 第一个参数是目的地,因此需要足够大以容纳连接的结果。 cplusplus.com/reference/cstring/strcat
  • strcat ( str1, str2 ); 尝试修改 String Literal 调用 Undefined Behavior
  • 这是一个奇怪的完全相同的副本。这是来自编码测试还是什么?

标签: c


【解决方案1】:

我会列出代码中的缺陷。

  1. “United”和“Front”是字符串常量,不能修改。
  2. strcat 将第二个字符串添加到第一个字符串,因为第一个输入是常量字符串,因此无法进行操作。
  3. printf 只需要 'str3'。

有2种方法可以纠正代码,a)通过scanf获取str1 b)通过strcpy获取str1

我已经提供了第二种方案,str1 & str3 都会有最终答案。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
main( )
{
        char *str1=malloc(20 * sizeof(char));
        char *str2 = "Front" ;
        char *str3 ;
        if(str1){
                strcpy(str1,"United");
                str3 = strcat ( str1, str2 ) ;
                printf ( "%s\n", str3 ) ;
                free(str1);
        }
        else{
                printf("malloc failure!\n");
        }
}

参考 cmets 我添加了一个没有动态内存分配的版本:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main( )
{
        char str1[20];
        char *str2 = "Front" ;
        char *str3 ;
        strcpy(str1,"United");
        str3 = strcat ( str1, str2 ) ;
        printf ( "%s\n", str3 ) ;
}

【讨论】:

  • strcpy(str1,"United");..呃哦!!
  • 有什么问题?
  • 尝试使用未初始化的指针作为目标。
  • 抱歉,已更正!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-19
  • 2010-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-11
相关资源
最近更新 更多