使用puts和strcat显示额外字符的结果字符串

时间:2015-10-21 06:15:53

标签: c string

#include<stdio.h>
#include<string.h>
int main()
{
    char c='g';
    char d[]="John ";
    strcat(d,&c);
    puts(d);
    return 0;
}

输出结果为:

John gC

&#39; C&#39;没有必要。

此外,const char*在这里意味着什么?

char *strcat(char *dest, const char *src)

另外,如果我想在字符串末尾添加一个字符,那么这样的语句(在循环内)是错误的吗?

char arr[]=' ';
symb[]={'a','b','c'}
strcat(arr, &symb[k]);
k++;

5 个答案:

答案 0 :(得分:1)

您正在写出d的范围,您还需要一个char的空间,更改为

char d[7] = "John ";

或(如果您不想指定数组的大小):

char d[] = "John \0";

char d[] = {'J', 'o', 'h', 'n', ' ', '\0', '\0'};

同样strcat想要一个有效的NUL终止字符串,并且您正在将指针传递给单个char,更改为

char *c= "g";

答案 1 :(得分:1)

两种方式(甚至更多): -

1&GT;

char *c="g";
char d[10]="John ";
strcat(d,c);

2 - ;

char c[]="g";
char d[10]="John ";
strcat(d,c);

虽然我建议d [10] = {0};然后复制字符串。 (正如大卫在评论中提到的那样。)

答案 2 :(得分:0)

您需要学习C和C风格字符串的基础知识。具体来说,一个特殊的零值字符标识字符串的结尾。

您复制了字符串但未复制终结符。因此,像puts()这样的函数不知道何时停止并打印恰好在内存中的其他字符。

答案 3 :(得分:0)

这有效:(如果你想要John g)

    #include<stdio.h>
    #include<string.h>
    int main()
    {
    char c='g';
    char d[10];
    char temp[2];

    strcpy(d ,"John ");
    temp[0]=c;
    temp[1]='\0';

    strcat( d , temp );


    puts(d);
    return 0;
    }

这有效:(如果你想要约翰)

#include<stdio.h>
#include<string.h>

int main()
{
char c='g';
char d[]="John ";
//strcat(d,&c);
d[strlen(d)-1]=c;

puts(d);
return 0;
}

答案 4 :(得分:0)

程序中有未定义的行为strcat需要null terminated字符串作为其c不在其中的参数。你可以这样做 -

char c[]="g";    
char d[7]="John ";         // leave space for 'g' as well as for '\0'
strcat(d,c);              // then pass both to strcat 

另一种方法是使用sprintf -

char c[]="g";
char d[10]="John";
size_t n =strlen(d);
sprintf(&d[n]," %s",c);