函数调用中的有线错误

时间:2014-01-11 17:56:07

标签: c string function call

以下函数应该加密最多10个字符串。

#include <stdio.h>
#include <string.h>

void crypt(char*);

int main()
{
    //one random message of up to 10 chars and function call.
    char str[7] = "george";

    crypt(str);

    printf("%s",str);
}

//this function crypt's the initial string's message.
void crypt(char str[])
{
   int i=0;

   while ((i<=10)&&(str[i]!='\0'))
   {
      if (str[i]<=119) {str[i] = str[i] + 3;}
      else if (str[i]==120) {str[i]='a';}
      else if (str[i]==121) {str[i]='b';}
      else {str[i]='c';}
      i++;
   }
}

}

相反,DevC ++给了我这个错误:

***In function 'int main':
[Error] invalid conversion from 'char*' to 'char' [-fpermissive]
[Error] initializing argument 1 of 'void crypt(char)' [-fpermissive]***

任何帮助将不胜感激。提前谢谢。

3 个答案:

答案 0 :(得分:2)

你可以尝试这样的事情

void crypt(char* str) // to conform with your prototype
{
   for (int i = 0; str[i] != '\0' && i < 10; ++i)
   {    
     if (str[i]<=119) { str[i] = str[i] + 3; }
     else if (str[i]==120) { str[i]='a'; }
     else if (str[i]==121) { str[i]='b'; }
     else { str[i]='c'; }
   }
}

答案 1 :(得分:1)

你应该替换

int i=0;

if (str[0]!='\0')
{    
    do
    {
      ...
    }while ((i<=10)||(str[i]=='\0'));
}

(包含while条件中的逻辑错误)

int i=0;

while (str[i]!='\0')
{    
    ...
}

,因为:

  • i<=10的测试对我来说似乎毫无意义且过于严格,
  • 如果省略,ifdo..while最好用一个while来表达,并在开始时进行检查。

答案 2 :(得分:0)

将您的函数原型更改为

void crypt(char *);  

根据OP的评论:

  

在“jhrujh”之后,程序继续打印7-8个更多的有线字符。有任何想法吗?

while循环中的逻辑错误。

void crypt(char str[])
{
    int i=0;

    while (str[i]!='\0')
    {
        if (str[i]<=119) {str[i] = str[i] + 3;}
        else if (str[i]==120) {str[i]='a';}
        else if (str[i]==121) {str[i]='b';}
        else {str[i]='c';}
        i++;
    }
}