2012-09-01 21 views
0

这里是我的代码:C++返回和使用字符数组的指针

#include<stdio.h> 
#define MAXLINE 100 

/*print the reverse of the input*/ 

int getline1(char line[], int maxline); 
char *reverse(char); 

main(){ 
    int len; 
    char line[MAXLINE]; 
    char *rp; 
    while ((len = getline1(line, MAXLINE)) > 0) 
      rp = reverse(line); 
      printf("%s", *rp); 
    return 0; 
} 
int getline1(char s[], int lim){ 
    int c, i; 

    for (i = 0; (c=getchar()) != EOF && c != '\n'; i++) 
      if (i > lim-1) 
        continue; 
      else 
        s[i] = c; 
    if (c == '\n'){ 
      s[i] = c; 
      i++; 
    } 
    s[i] = '\0'; 
    return i; 
} 
char *reverse(char ca[]){ 
    int i; 
    int i1 = 0; 
    char *rp; 
    char reversed[MAXLINE]; 
    for (i = MAXLINE-1; i >= 0; i--){ 
      reversed[i1] = ca[i]; 
      i1++; 
    } 
    rp = reversed; 
    return rp; 
} 

但是当我尝试编译它,我收到以下错误:

reverse.cpp: In function ‘int main()’: 
reverse.cpp:14:20: error: invalid conversion from ‘char*’ to ‘char’ [-fpermissive] 
reverse.cpp:7:7: error: initializing argument 1 of ‘char* reverse(char)’ [-fpermissive] 
reverse.cpp:15:19: warning: format ‘%s’ expects argument of type ‘char*’, but argument 2 has type ‘int’ [-Wformat] 

我没有太多的经验与C++。我究竟做错了什么?我只想做一个指向char数组的指针并返回它。

+3

你可能正在使用C++ *编译器*,但你的代码基本上C. –

+1

你应该把它标记为家庭作业,或C(并删除C++,因为这里没有任何C++)。 – juanchopanza

+1

事实上,你正在返回一个指向__local临时数组___的指针,这一点不能被强调。这是一个严重的错误,你应该采取DeadMG的建议。 – Blastfurnace

回答

3

我只想做一个指向char数组的指针并将其返回。

你似乎想返回一个字符串。这不是一个char数组的指针。即使你的程序编译了,你也会调用UB,因为你返回一个指向自动对象的指针 - 而且在你的代码中还有其他很多运行时错误。你很幸运,你也犯了一个编译时错误,所以编译器不接受你的程序。这个C++程序实现你想要什么:

#include <string> 
#include <iostream> 

std::string reverse(std::string val) { 
    return std::string(val.rbegin(), val.rend()); 
} 
int main() { 
    std::string str; 
    while(std::getline(std::cout, str)) 
     std::cout << reverse(str); 
} 

我在做什么错?

你学习C++ 11 C89这一翻译。他们真的是不同的东西。

如果您想了解代码C++,你必须学会​​std::string,标准库的其余部分。你不会得到char*char[]MAGIC_BUFFER_SIZE

+0

谢谢,你有正确的想法,但你的代码不起作用。我还是设法得到这个工作,虽然:'#包括 的#include /*打印使用空间std输入*/ 的反向; string reverse(string in){ return string(in.rbegin(),in。雷德()); } main(){ string in; (cin >>中) cout << reverse(in); }' – djpetti

+0

可能为'std :: getline'或其他东西得到了错误的头文件。除此之外,您的代码在功能上与我的完全相同。 – Puppy

2

你先声明函数原型

char *reverse(char); 

但实际的函数声明为

char *reverse(char ca[]) 

那是你的问题。

0

你想达到什么目的?有逻辑错误代码......

while ((len = getline1(line, MAXLINE)) > 0) 
     rp = reverse(line); 
     printf("%s", *rp); 

这一部分将呼吁每一个反向/ n字符,但printf的永远不会被称为... 你也有100个字符的字符串,你的反向会把领先字符反向字符串结束..所以,如果你有5个字符的字符串,你将有95个位置上的垃圾,然后你需要5个字符...