ここから本文です

C言語です。 プログラムを作成したのですが、以下のようなエラーが出ました。 Se...

els********さん

2019/6/1814:20:27

C言語です。
プログラムを作成したのですが、以下のようなエラーが出ました。
Segmentation fault (コアダンプ)
調べたところ再起処理のやりすぎと出ました。

解決策を教えてください。


lower2upperは1個の文字ポインター引数をもつvoid型関数で、引数の指す文字列の英小文字を英大文字に変換する。
mainでは文字列を宣言し、lower2upperを呼出して大文字変換し、結果を表示する。



#include <stdio.h>
void lower2upper(char *x);

int main(){
char *name = "Name";
lower2upper(name);
}

void lower2upper(char *p){
for(;*p != '\0'; p++){
if(*p >= 'a' && *p <= 'z'){
*p = 'A' + (*p - 'a');//大文字変換
}
printf("%s",*p);
}
}

閲覧数:
25
回答数:
1
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

nan********さん

2019/6/1815:24:06

再帰は無関係です。
char *name = "Name";
こう書くと「読み出し専用」のメモリーに Name が確保されてしまうからです。
char name[] = "Name";
ならば、スタック上に確保されるのでうまく行きます。
あと、
printf("%s",*p);

printf("%c",*p);
の間違えです。

質問した人からのコメント

2019/6/18 17:12:11

解説ありがとうございました。
%cは1文字でしたね…
ご指摘ありがとうございます。

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる