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

的输出是:结果字符串利用puts和strcat的示出额外的字符

John gC 

的 'C' 中不是必需的。

另外,const char*是什么意思?

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

而且,就是这样一个声明(一环内)错误的地方,如果我想在字符串末尾添加一个角色?

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

你正在写超越D'的'结束后,您的结果将是不确定的* *(就像一盒巧克力。 ..)看看'man 3 strcat',特别是“*如果dest不够大*”如何?char d [32] = {0}; strcpy(d,“John”);'然后'strcat'。 –

+1

'char c'是一个字符,而不是一个字符串。 strcat只能用于字符串,因此是“str”前缀。 – Lundin

+0

我投票结束这个问题,因为OP认为C是一个真正的字符串类型的真正的高级语言。是的,它再次是数组bounds/null-terminator;( –

回答

0

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

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

1

你写出的d界限的,你需要的空间多了一个char,改变

char d[7] = "John "; 

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

char d[] = "John \0"; 

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

而且strcat婉TS有效NUL结尾的字符串和要传递一个指向一个单一char,改为

char *c= "g"; 
0

这工作:(如果你想约翰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; 
    } 

这工作:(如果你想Johng)

#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; 
} 
1

两种方式(还有更多): -

1>

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

2>

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

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

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);