私はCプログラミングが初めてです。
文字列を印刷しようとすると、セグメンテーション違反 (コア ダンプ) が発生します。助けてください。
#include <stdio.h>
#include <string.h>
int main()
{
char *ptr;
strcpy(ptr, "mystring");
printf( "%s\n", ptr);
return 0;
}
私はCプログラミングが初めてです。
文字列を印刷しようとすると、セグメンテーション違反 (コア ダンプ) が発生します。助けてください。
#include <stdio.h>
#include <string.h>
int main()
{
char *ptr;
strcpy(ptr, "mystring");
printf( "%s\n", ptr);
return 0;
}
ポインタが指すメモリを割り当てていません。
char array[MAX_LEN + 1];
char *ptr = array;
strncpy(ptr, "Cadence", MAX_LEN);
ptr[MAX_LEN] = '\0';
printf( "%s\n", ptr);
コピーする最大文字数が指定されているため、文字列をコピーするより安全な方法であるstrncpy()
ことに注意してください。これにより、文字列のオーバーランとメモリの「落書き」が難しくなります。
コメントに応じて更新: 少し安全なパターンを使用するように上記のコードを変更しました。調査することもできますstrlcpy()
(非標準ライブラリ)。
を宣言するchar *ptr;
と、char へのポインタにメモリが割り当てられます。ただし、char の中に文字列を入れたい場合は、オーバーフローが発生します。
したがって、文字列にメモリを割り当てる必要があります。
char str[1024]; // これは、str に入れることができる文字列の最大長です。
\0
さらに、すべての文字列を終了し、1 文字のサイズを持つnull ターミネータ ( ) を忘れないでください。