使用指针连接两个字符串 [英] CONCATENATION OF TWO STRINGS USING POINTER
问题描述
使用指针连接两个字符串,它无法正常工作。请帮助我..........
#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 tomalloc
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屋!