c++返回并使用char数组指针
c++ returning and using char array pointers
这是我的代码:
#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] = ' ';
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数组的指针并返回它。
我只想制作一个指向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
,您将一无所获。
您首先声明函数原型
char *reverse(char);
但实际功能被声明为
char *reverse(char ca[])
这是你的问题。
您想要实现什么?代码中存在逻辑错误。。。
while ((len = getline1(line, MAXLINE)) > 0)
rp = reverse(line);
printf("%s", *rp);
这部分将对每个/n字符调用reverse,但永远不会调用printf。。。此外,您有一个100个字符的字符串,您的反向将把前导字符放在反向字符串的末尾。。所以如果你有一个5个字符的字符串,你会在前95个位置上有垃圾,然后你需要5个字符。。。