[英]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.