0

Cで部分文字列関数を実装しようとしています。これまでのところ、次のとおりです。

char *substring(const char* str, int beg, int n)
{
   char *ret = malloc(n+1); 
   strncpy(ret, (str + beg), n);
   *(ret+n) = '\n';

   return ret;    
}    

ただし、この主な機能がある場合:

int main()
{
   char *a = "thisisalongstring";
   char *c;

   c = substring(a, 2, 5);
   printf("%s", c);

   return 0;
}

出力は次のとおりです。

isisa
<random characters>  

コードのデバッグに役立ちますか?

4

2 に答える 2

7

文字列を null で終了する必要があります。

*(ret+n) = '\n';

する必要があります

*(ret+n) = 0;

ノート:

また、部分文字列が文字列サイズを超えないようにする必要があります。

beg+n < strlen(str)
于 2012-10-27T05:12:07.247 に答える
0

これもチェックしたほうがいいと思います

str != NULL

n > 0

begもチェックする必要があるかもしれません。begまた、 が負数の場合は末尾から数えることができます。

たとえば、 forはchar *a = "thisisalongstring";substring( a, -1, 1 )文字列の最後の文字である を意味しますg

于 2012-10-27T06:19:59.830 に答える