2012-09-01 53 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個字符...