-7

私のコードでは、意味がわかりませんが、エラー メッセージのセグメンテーション違反が繰り返し表示されます。Caesar 暗号を作成しようとしていますが、コードでエラー メッセージが表示され続けます。問題が何であるかはわかりません。助けていただければ幸いです。

#include <stdio.h>
#include<cs50.h>
#include<string.h>
#include<ctype.h>
void encrypt(int k,string text);
int main(int argc,string arcv[])
{
    if(argc != 2)
    {         
         printf ("Please return a vaild command line argument");
         return 1;
    }
    else
    {
    printf("Enter your text here:");
    string s = GetString();
    int x;  
    x = (int) (arcv[1] - '0');
    encrypt(x,s);
    }
}


void encrypt(int k,string text)
{  
  if(k > 26)
  {
      k = k % 26;
  }
  for(int i = 0;i < strlen(text); i++)  
  { 
  if(isalpha(text))
  {
      printf("%c",text[i] + k);
  }
  else
  {
      printf("%c",text[i]);
  }
  }
}
4

1 に答える 1

3

おそらくhttps://en.wikipedia.org/wiki/Segmentation_faultをご覧ください。

基本的に、コードがアドレスのデータを無効な方法で使用しようとしていることを意味します。C コードの一般的なケースは次のようなものです。

char * cptr = NULL ;
cptr = some_function_returning_null();
printf("%s\n"cptr);

ポインタ cptr のメモリが正しく設定されていません。文字列を印刷しようとすると、セグ フォールトが発生します。

isalpha(text)あなたの場合、私はそうあるべきだと思いますがisalpha(text[i])、これが問題を引き起こしているとは思えません。

おそらく、入力引数を含む完全なトレースを提供すると、問題を見つけやすくなります。

于 2015-08-24T13:31:51.620 に答える