[英]Concatenating two strings but getting null. please pont me error in this
我正在尝试将两个字符串复制到一个新指针。 这是将字符串指针与子指针连接起来。 试图在新指针 str 中创建 output。这有什么问题?
void addsubstring( char* string, char* sub)
{
//int m = strlen(string);
char *str=(char*)malloc(sizeof(char)*10);
int n =0;
while( *string != '\0')
{
*(str) = *(string++);
printf("char is %c\n", str[n++]);
str++;
}
while( *sub != '\0')
{
*(str) = *(sub++);
printf("char is %c\n", str[n++]);
str++;``
}
printf("%s", str);
}
对于初学者来说,这个 memory 分配使用幻数10
使 function 不安全。
char *str=(char*)malloc(sizeof(char)*10);
在这些 while 循环中
while( *string != '\0')
{
*(str) = *(string++);
printf("char is %c\n", str[n++]);
str++;
}
while( *sub != '\0')
{
*(str) = *(sub++);
printf("char is %c\n", str[n++]);
str++;``
}
指针str
正在更改(递增)。 所以在循环之后它指向一个垃圾。
而且您忘记在结果字符串中包含终止零字符'\0'
。
function 可以通过以下方式定义
char * addsubstring( const char *s1, const char *s2 )
{
size_t n1 = strlen( s1 );
char *result = malloc( n1 + strlen( s2 ) + 1 );
if ( result != NULL )
{
memcpy( result, s1, n1 );
strcpy( result + n1, s2 );
}
return result;
}
这是一个演示程序
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char * addsubstring( const char *s1, const char *s2 )
{
size_t n1 = strlen( s1 );
char *result = malloc( n1 + strlen( s2 ) + 1 );
if ( result != NULL )
{
memcpy( result, s1, n1 );
strcpy( result + n1, s2 );
}
return result;
}
int main(void)
{
char *p = addsubstring( "Hello ", "World!" );
if ( p ) puts( p );
free( p );
return 0;
}
程序 output 是
Hello World!
如果您可能不使用标准的 C 字符串函数,则可以定义 function,如下面的演示程序所示
#include <stdio.h>
#include <stdlib.h>
char * addsubstring( const char *s1, const char *s2 )
{
size_t n = 0;
while ( s1[n] ) ++n;
while ( s2[n] ) ++n;
char *result = malloc( n + 1 );
if ( result != NULL )
{
char *p = result;
while ( *s1 ) *p++ = *s1++;
while ( ( *p++ = *s2++ ) );
}
return result;
}
int main(void)
{
char *p = addsubstring( "Hello ", "World!" );
if ( p ) puts( p );
free( p );
return 0;
}
程序output同上图
Hello World!
问题是指针str
滑动了。 您应该创建另一个指针用作原点。 此外,您还必须通过添加空字符来终止搅拌,然后再将其传递给%s
。
也不要忘记释放分配的缓冲区,否则会发生 memory 泄漏。
另一点是malloc()
系列的强制转换结果被认为是一种不好的做法。
固定代码:
void addsubstring( char* string, char* sub)
{
//int m = strlen(string);
char *str=malloc(sizeof(char)*10);
char *str_start = str;
int n =0;
while( *string != '\0')
{
*(str) = *(string++);
printf("char is %c\n", str_start[n++]);
str++;
}
while( *sub != '\0')
{
*(str) = *(sub++);
printf("char is %c\n", str_start[n++]);
str++;
}
*(str) = '\0';
printf("%s", str_start);
free(str_start);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.