char型のポインタを宣言し、scanf_sで代入しようとすると、コンパイルもデバックも正常にできるのに、文字を打ってエンターを押すとDebug Assertion Failed!と警告されてしまいます。ポインタの解釈がまちがっていますか?関数にしてはいけないのでしょうか?
...
char *gook[10];
void go(int i) {
scanf_s("%s",gook[i],4);
}
int main(void){
...
go(0);
...
go(1);
}
こんな感じです。C言語で、Microsoft visual studioを使っています。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
ポインタの中身が空に見えます。省略されているのですか?
投稿2019/08/27 13:21
総合スコア4830
0
どう見ても正しい時は、一旦目を変える(目が慣れちゃってる)必要があります。明日になれば、あーって思うと思います。
char *gook[10];
アスタリスクがいりません。
あと、今回不要なんですが、不要かどうかはともかく
char gook[10] = {0};
を習慣づけると、魔除けになります。
※コードを読み間違いしてました。
コメント欄も見てください。
goの入力値が配列の範囲内かどうかチェックすることも考えておいてください。
投稿2019/08/27 15:13
編集2019/08/27 16:19総合スコア92
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/27 16:14
2019/08/27 16:20
2019/08/27 16:26
0
よくある間違いです。文字列を格納する領域を確保しないで、ポインタを使っています。
「追記」
ポインタを扱うときには、データの格納域を確保してそのアドレスを代入することを忘れないようにしましょう。
c
1char str[]="abcdefg"; 2char *ptr= str;
こんな感じかな?
text
1usr ~/Project/test % ./a.out 2入力開始 3123 42 53 64 75 86 97 108 119 120 13入力終了 14123 152 163 174 185 196 207 218 229 230
scanf_s()が使えないのでscanf()にしてますが・・・入力時の文字数には気をつけましょう。
c
1#include <stdio.h> 2 3#define PTR_SIZ (10) 4#define STR_SIZ (5) 5 6static void go(char *sp) 7{ 8 scanf("%4s",sp); 9} 10 11int main(void) 12{ 13 char str[PTR_SIZ][STR_SIZ]; 14 char *gook[PTR_SIZ] = { str[0], str[1], str[2], str[3], str[4], 15 str[5], str[6], str[7], str[8], str[9] }; 16 // 17 puts("入力開始"); 18 for (int i = 0; i < PTR_SIZ; i++) { 19 go(gook[i]); 20 } 21 puts("入力終了"); 22 // 23 for (int i = 0; i < PTR_SIZ; i++) { 24 puts(gook[i]); 25 } 26 27 // 28 return 0; 29}
各関数についてはC言語関数辞典などを参考にして下さい。
当方の環境
clang version 10.0.0 (trunk 367677) on Linux mint 19.2
投稿2019/08/27 13:40
編集2019/08/27 23:07総合スコア6851
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/03 22:12
2019/09/03 22:19
2019/09/03 22:31
2019/09/03 22:40
2019/09/03 22:59 編集
2019/09/03 22:57
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。