我需要编写程序

问题描述 投票:1回答:2

任务:编写一个程序,该程序使用指向函数中字符串的指针来使用结构确定字符串中的字符数。

编译器抛出错误:

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;
}
c++ c-strings strlen function-definition
2个回答
3
投票

程序中有几种无效的构造。

您至少必须写

void func( const char *a )
          ^^^^^^^^^^^^^^

char* ptr = student1.name;
func(ptr);

而不是

cin >> student1.name;

最好使用

cin.get( student1.name, sizeof( student1.name ) );

而且似乎不允许您使用标准的C函数strlen,您必须自己编写等效的函数。


0
投票

[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;
}
© www.soinside.com 2019 - 2024. All rights reserved.