の宣言の中で、私はCで、次の機能があります:あなたが見ることができるように、この機能文字 `*との差str`と`文字列str [] `文字列
int TransMinMaj(char *c)
{
if((*c) >= 'a' && (*c) <= 'z')
{
*c += 'A' - 'a';
return 1;
}
else if((*c) >= 'A' && (*c) <= 'Z')
return 1;
return 0;
}
を:
1.リターン1文字がテストした場合、文字
2.大文字
3に下部ケースに変換されそうでなければ、(それは文字ではないことを示すために)0を返す
Iヘクタール渡されたパラメータc
の値をメモリ内で変更したいので、アドレスでパラメータを渡すことを選択しました。
今、私の質問が来る: 私は私の関数は次のコード小枝テスト:今まで
char str[] = "abcdefg";
printf("Before: %s\n", str);
TransMinMaj(&str[1]);
printf("After: %s\n", str);
を、すべてが良いですが、エラーなし、警告なし。ご覧のとおり、このテストでは、小文字のb
(文字列の2番目の要素)もメモリの大文字「B」に変換します。
しかし、テストコードをリッテビット変更した場合:セグメンテーションエラー(コアダンプ)があり
char *str = "abcdefg";
printf("Before: %s\n", str);
TransMinMaj(&str[1]);
printf("After: %s\n", str);
を。 しかし私は理由を知らない。
だからここに私の質問来る:
1.宣言でchar *str
とchar str[]
の違いは何ですが?
2.私のセグメンテーションエラーはどこから来たのですか?
質問をする前に検索を使用してください。あなたの質問が以前に尋ねられた可能性が非常に高いです。これは時間の始めから尋ねられています。 – 2501
ポインタで行うことができます:ptr1 = ptr2;配列はありません。ポインタを使ってptr1 ++を実行できます。配列はありません。配列の場合、sizeof(array)/ sizeof(array [0])をポインタで呼び出すことはできません。そしてそのようなもの – jurhas