c89 gcc(GCC)4.6.3
こんにちは、
* search='\0'でスタックダンプを取得しています。文字列をヌル文字で終了することは可能だと思いました。
char *ptr_name = "hello@home";
char *search = ptr_name;
search = strchr(ptr_name, '@');
search++;
*search = '\0';
提案をありがとう、
ptr_nameは、読み取り専用領域の文字列を指します。
代わりに試してください:
char ptr_name[] = "hello@home"
それが文字通りの定数であるときではなく、あなたはできません。それをスタックまたはヒープ変数にstrcpy()してから、変更することができます。
char *ptr_name = "hello@home";
文字列定数を作成し、変更することはできません。
期待どおりの結果を得るには"hello@home"
、配列を使用するため、char arr_name[] = "hello@home";
または実行時に動的に使用するためにメモリを割り当てる必要がありmalloc
ます。
プログラムは次のようになります。
#include <stdio.h>
#include <string.h>
int main()
{
char arr_name[] = "hello@home";
char *search = arr_name;
printf("%s \n", arr_name);
search = strchr(arr_name, '@');
search++;
*search = '\0';
printf("%s \n", arr_name);
return 0;
}
出力:
$ ./a.out
hello@home
hello@
$