任务:编写一个程序,该程序使用指向函数中字符串的指针来使用结构确定字符串中的字符数。
编译器抛出错误:
error: invalid conversion from 'char' to 'const char*' [-fpermissive]
8 | cout << strlen(a);
| ^
| |
| char
这是我的代码:
#include <iostream>
#include <cstring>
using namespace std;
void func(char a)
{
cout << strlen(a);
}
int main()
{
struct student
{
char name[64];
};
student student1;
cin >> student1.name;
char* ptr = &student1.name[64];
func(*ptr);
return 0;
}
程序中有几种无效的构造。
您至少必须写
void func( const char *a )
^^^^^^^^^^^^^^
和
char* ptr = student1.name;
func(ptr);
而不是
cin >> student1.name;
最好使用
cin.get( student1.name, sizeof( student1.name ) );
而且似乎不允许您使用标准的C函数strlen
,您必须自己编写等效的函数。
[char a
是单个字符,因此strlen(a)
无效,您需要将指针传递给func:
void func(const char* a)
{
cout << strlen(a);
}
int main()
{
struct student
{
char name[64];
};
student student1;
cin >> student1.name;
char* ptr = student1.name;
func(ptr);
return 0;
}
我也更改了&student1.name[64]
,因为这将获得指向数组最后一个元素之后的元素的指针,这不是您想要的。
当我们使用c ++时,我们可以只使用std::string
使您的代码更加简单和安全:
void func(const std::string& a)
{
cout << a.size();
}
int main()
{
struct student
{
std::string name;
};
student student1;
cin >> student1.name;
func(student1.name);
return 0;
}