Мне нужно написать программу - PullRequest
2 голосов
/ 15 апреля 2020

Задача: написать программу, которая использует указатель на строку символов в функции для определения количества символов в строке с использованием структур.

Компилятор выдает ошибку:

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;
}

Ответы [ 2 ]

3 голосов
/ 15 апреля 2020

В программе имеется несколько недопустимых конструкций.

Вы должны хотя бы написать вместо

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

и

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

И вместо

cin >> student1.name;

лучше использовать

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

Также кажется, что вы не можете использовать стандартную C функцию strlen и должны самостоятельно написать эквивалентную функцию.

1 голос
/ 15 апреля 2020

char a - это один символ, поэтому strlen(a) недопустим, вам нужно передать указатель на забаву c:

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;
}
...