1

私はCプログラミングが初めてです。
文字列を印刷しようとすると、セグメンテーション違反 (コア ダンプ) が発生します。助けてください。

#include <stdio.h>
#include <string.h>
int main()
{
  char *ptr;
  strcpy(ptr, "mystring");
  printf( "%s\n", ptr);
 return 0;
}
4

2 に答える 2

7

ポインタが指すメモリを割り当てていません。

char array[MAX_LEN + 1];

char *ptr = array;

strncpy(ptr, "Cadence", MAX_LEN);
ptr[MAX_LEN] = '\0';

printf( "%s\n", ptr);

コピーする最大文字数が指定されているため、文字列をコピーするより安全な方法であるstrncpy() ことに注意してください。これにより、文字列のオーバーランとメモリの「落書き」が難しくなります。

コメントに応じて更新: 少し安全なパターンを使用するように上記のコードを変更しました。調査することもできますstrlcpy()(非標準ライブラリ)。

于 2013-02-12T06:30:53.753 に答える
1

を宣言するchar *ptr;と、char へのポインタにメモリが割り当てられます。ただし、char の中に文字列を入れたい場合は、オーバーフローが発生します。

したがって、文字列にメモリを割り当てる必要があります。

char str[1024]; // これは、str に入れることができる文字列の最大長です。

\0さらに、すべての文字列を終了し、1 文字のサイズを持つnull ターミネータ ( ) を忘れないでください。

于 2013-02-12T14:38:46.943 に答える