使用指针连接两个字符串 [英] CONCATENATION OF TWO STRINGS USING POINTER

查看:99
本文介绍了使用指针连接两个字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述





使用指针连接两个字符串,它无法正常工作。请帮助我..........



 #include< iostream> 
使用 命名空间标准;

int main()
{
char * str1 = krishna;
char * str2 = Prasad< /跨度>;
char * str3;
int count = 0 ;
int i,j;
for (i = 0 ; * str1!= NULL; i ++,* str1 ++)
{
count ++;
}
for (j = 0 ; * str2!= NULL; j ++ ,* str2 ++)
{
count ++;
}
// str3 = new char [sizeof(str1)+ sizeof(str2)] ;
str3 =(char *)malloc( 13 );


for (i = 0 ; str1 [i] != NULL; i ++)
{
str3 [i] = str1 [i];
}

for (j = 0 ; str2 [j ]!= NULL; j ++,i ++)
{
str3 [i] = str2 [j];

}
cout<< endl;
cout<< 字符串3 =;

while (* str3)
{
cout<< * str3 ++;
}
return 0 ;
}

解决方案

当使用malloc或new为nul终止字符串分配字符数组时,需要包括一个额外的字符用于终止nul。



替换它:

 str3 =( char  *)malloc( 13 ); 





这个:

 str3 =( char  *)malloc(count +  1 ); 





或者这个:

< pre lang =c> str3 = new char [count + 1 ];





不要忘记用空字符终止新字符串。



替换为:

  for (j = < span class =code-digit> 0 ; str2 [j]!= NULL; j ++,i ++)
{
str3 [i] = str2 [j];
}





这个:



  for (j =  0 ; str2 [j]!=  0 ; j ++,i ++)
{
str3 [i] = str2 [j];
}
str3 [i] = 0 ;





既然新字符串已经终止,你可以替换它:



  while (* str3)
{
cout<< * str3 ++;
}





这个:



 cout<< str3; 





以下代码告诉我你尝试了一些东西,但它不起作用。



  //   str3 = new char [sizeof(str1)+ sizeof (str2)];  





原因是sizeof运算符没有给出字符串的长度但是大小字符串指针。


正如建议你应该正确处理字符串终止符。此外,您应该处理可能失败的调用 malloc 并正确释放动态分配的内存。



  #include   <   stdio.h  >  
#include < < span class =code-leadattribute> stdlib.h >

int my_strlen( const char * s)
{
int l = 0 ;
while (s [l])++ l;
return l;
}

int main()
{
const char * s1 = krishna ;
const char * s2 = Prasad;

int l1 = my_strlen(s1);
int l2 = my_strlen(s2);

char * s3 =( char *)malloc(l1 + l2 + 1 ); // 为字符串终结符腾出空间

if (!s3) return - 1 ; // malloc失败

int n1,n2,n3;
n3 = 0 ;
for (n1 = 0 ; n1< l1; ++ n1,++ n3 )
s3 [n3] = s1 [n1];

for (n2 = 0 ; n2< l2; ++ n2 ,++ n3)
s3 [n3] = s2 [n2];

s3 [n3] = ' \ 0'; // 追加字符串终结符

printf( string 3是%s \ n,s3);

免费(s3); // 释放已分配的内存

return 0 ;
}


很抱歉,但是当我看到这样的代码时我无法抗拒:)。

C语言是基本的,不值得重新发明轮子。

使用标准例程并按原样编码:

 < span class =code-keyword> int  main()
{
char * str1 = krishna;
char * str2 = Prasad< /跨度>;
char * str3;

str3 = malloc(strlen(str1)+ strlen(str2)+ 1 ); // 为2个字符串的长度加上最终的空值分配空格。
strcpy(str3,str1); // 复制结果中的第一个字符串
strcat(str3,str2): // 附加第二个字符串。

cout<< STR3; // 打印全新字符串!

返回 0 ;
}


Hi,

CONCATENATION OF TWO STRINGS USING POINTER, it is not working. pls help me..........

#include<iostream>
using namespace std;

int main()
{
    char *str1 = "krishna";
    char *str2 = "Prasad";
    char *str3;
    int count = 0;
    int i,j;
    for(i=0;*str1!=NULL;i++,*str1++)
    {
        count++;
    }
    for(j= 0; *str2!=NULL;j++,*str2++)
    {
        count++;
    }
    //str3 =  new char[sizeof(str1)+sizeof(str2)];
    str3 = (char*) malloc(13);


    for(i=0;str1[i]!=NULL;i++)
    {
        str3[i] = str1[i];
    }

    for(j= 0; str2[j]!=NULL;j++,i++)
    {
        str3[i] = str2[j];

    }
    cout<<endl;
    cout<<"String 3 is = ";

    while(*str3)
    {
        cout<<*str3++;
    }
    return 0;
}

解决方案

When using malloc or new to allocate an array of characters for a nul terminated string, you need to include one extra character for the terminating nul.

Replace this:

str3 = (char*) malloc(13);



with this:

str3 = (char*) malloc(count + 1);



or this:

str3 = new char[count + 1];



Don't forget to terminate the new string with a nul character.

Replace this:

for(j= 0; str2[j]!=NULL;j++,i++)
{
    str3[i] = str2[j];
}



with this:

for(j=0; str2[j]!=0; j++,i++)
{
    str3[i] = str2[j];
}
str3[i] = 0;



Now that the new string is nul terminated, you can replace this:

while(*str3)
{
    cout<<*str3++;
}



with this:

cout << str3;



The following code tells me you tried something but it did not work.

//str3 =  new char[sizeof(str1)+sizeof(str2)];



The reason is the sizeof operator does not give you the length of a string but the size of the string pointer.


As suggested you should properly handle string terminators. Moreover, you should handle a possibly failing call to malloc and properly release dynamically allocated memory.

 #include <stdio.h>
 #include <stdlib.h>

 int my_strlen(const char * s)
 {
   int l = 0;
   while ( s[l] ) ++l;
   return l;
 }

 int main()
 {
   const char *s1 = "krishna";
   const char *s2 = "Prasad";

   int l1 = my_strlen(s1);
   int l2 = my_strlen(s2);

   char * s3 = (char *) malloc(l1 + l2 + 1); // make room for the string terminator

   if ( ! s3 ) return -1; // malloc failure

   int n1, n2, n3;
   n3 = 0;
   for (n1=0; n1 < l1; ++n1, ++n3)
     s3[n3] = s1[n1];

   for (n2=0; n2 < l2; ++n2, ++n3)
     s3[n3] = s2[n2];

   s3[n3] = '\0'; // append the string terminator

   printf("string 3 is %s\n", s3);

   free(s3); // release allocated memory

   return 0;
}


Sorry, but when I see code like that I can't resist :).
C language is basic enough to don't be worth to reinvent the wheel.
Use standard routines and code it as it should be:

int main()
{
    char *str1 = "krishna";
    char *str2 = "Prasad";
    char *str3;

    str3 = malloc(strlen(str1) + strlen(str2) + 1);  //Allocate space for the sum of the lenghts of the 2 strings plus the final null.
    strcpy(str3, str1);    //Copy first string in the result
    strcat(str3, str2):    //Append the second string.

    cout << str3;     //print whole new string!

    return 0;
}


这篇关于使用指针连接两个字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆