C - [错误]来自' char'的无效转换到#char; char *' [-fpermissive]

时间:2017-01-13 05:41:55

标签: c

有很多关于C ++的主题,但是我在这里遇到了常规C,无法在任何地方找到答案。

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

main() {
    char word[26], letter, reverse[26], length;
    printf("Enter word: ");
    scanf("%s", &word);

    length=strlen(word);
    for (int i=0; i<=length; i++) {
        letter = word[length-i];
        strcpy(reverse, letter);
        printf("%c\n", reverse);
    }

    getch();
}

标题声明我收到了错误。

  

13 25~ [错误]来自&#39; char&#39;的无效转换到#char; char *&#39;   [-fpermissive]

51    18  C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\include\string.h  [Note]
     

初始化&#39; char * strcpy(char *,const char *)&#39;

的参数2

代码应该做的是反转书面文字并逐行输入每个最后一个字母。 等等 - 输入&#34;食物&#34;程序应输出:

d

OD

OOD

食品

我知道我在这封信的某处搞砸了,但我不知道如何修复它。 我也试图避免使用std ::,个人偏好。

4 个答案:

答案 0 :(得分:2)

试试这个:

int main( void ) {
    char word[26], reverse[26];
    int length, i;

    printf("Enter word: ");
    scanf("%s", &word);   
    length=strlen(word);

    for (i=0; i<length; i++) {
        reverse[i] = word[length - i - 1];
    }

    /* Put \0 to terminate the string */
    reverse[length]='\0';
    printf("%s\n", reverse);
}

请注意,在for循环中,您只能使用<而不是<=,因为您将超出数组的范围(负索引)并且您必须放置{{1终止符来终止你的反向字符串。您不需要\0,而btw letter不能使用单个字符,因为单个字符不是字符串(因为缺少字符串终止符(strcpy))。

编辑:

\0

答案 1 :(得分:1)

问题:

  • 您将数组的地址传递给scanf,而不是传递数组。
  • 您无法正确复制空终止。
  • strcat必须以空终止字符串作为参数,它不能用于单个字符。无论如何,你不需要在这里使用它。

修正程序:

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

int main (void) 
{
  char word[26];
  char reverse[26]; 
  size_t length;
  size_t i;

  printf("Enter word: ");
  scanf("%s", word);

  length=strlen(word);
  for (i=0; i<length; i++) 
  {
    reverse[i] = word[length-i-1];
  }
  reverse[i] = '\0';

  printf("Reverse: %s\n", reverse);
  return 0;
}

输出:

Enter word: stackoverflow
Reverse: wolfrevokcats

答案 2 :(得分:-1)

代码中有很多错误。您要问的问题是由于您传递了char(即变量letter)而不是地址(即&letter

这&#34;修复&#34;会导致编译器错误消失,但是会导致出现另一个错误。这是因为我们现在正在将指针传递给char而不是指向终止字符串的指针。

for (i=0 ; i<26 ; i++)
    reverse[i] = word[25-i];

答案 3 :(得分:-4)

这里我必须传入strcat(char * s1,const char * s2); 这里反向是cha *,而&amp;字母是const char *。 看看这个。

这是您想要输出的代码。

int main()
{
    char word[26], letter, length;
    int n, c, d;

    char reverse[26];
    char temp[26];
    printf("Enter word: ");
    scanf("%s", word);
    length=strlen(word);
    for (int i=0; i<=length; i++)
        {
            letter = word[length-i];
            strcat(reverse, &letter);
            n = strlen(reverse);
            for (c = n - 1, d = 0; c >= 0; c--, d++)
            temp[d] = reverse[c];
            temp[d] = '\0';
            printf("%s\n", temp);
    }
    return 0;
}

输出: -

Your Output