我的strncpy函数不起作用,显示类型“cons char”的参数与参数类型“char”兼容
当我在主函数中调用前缀函数时,它说我必须有一个指向函数类型的指针

#include <iostream>
#include <string>
#include <cstring>
using namespace std;

void prefix(const char s1[], const char s2[], char prefix[]);

    int main()
    {
        char s1[30];
        char s2[30];
        char prefix[30];

        cout << "Enter two sentences to store in two different strings" << endl;
        cin.getline(s1, 30);
        cin.getline(s2, 30);

        prefix(s1, s2, prefix);

    }

    void prefix(const char a[], const char b[], char prefix[])
    {
        int size;
        if (strlen(a) < strlen(b))
        {
            size = strlen(a);
        }
        else if (strlen(a) > strlen(b))
        {
            size = strlen(b);
        }
        else
        {
            size = strlen(a);
        }


            for (int i = 0; i < size; i++)
            {
                if (a[i] != b[i])
                {
                    strncpy(a, b, size);
                }
            }
    }

最佳答案

对于初学者,此声明主要

char prefix[30];

隐藏在全局 namespace 中声明的具有相同名称的函数。

重命名函数或变量,或为函数使用限定名称。

这个循环
        for (int i = 0; i < size; i++)
        {
            if (a[i] != b[i])
            {
                strncpy(a, b, size);
            }
        }

没有意义,在这个电话中
strncpy(a, b, size);

您正在尝试更改指针a指向的常量数组。

而且函数strlen有许多冗余调用。

如下面的演示程序所示,可以通过以下方式声明和定义该函数。
#include <iostream>

char * common_prefix( const char s1[], const char s2[], char prefix[] )
{
    char *p = prefix;

    for ( ; *s1 != '\0' && *s1 == *s2; ++s1, ++s2 )
    {
        *p++ = *s1;
    }

    *p = '\0';

    return prefix;
}

int main()
{
    const size_t N = 30;

    char s1[N];
    char s2[N];
    char prefix[N];

    std::cout << "Enter two sentences to store in two different strings" << '\n';
    std::cin.getline( s1, N );
    std::cin.getline( s2, N );

    std::cout << "The common prefix is \"" << common_prefix( s1, s2, prefix )
              << "\"\n";

    return 0;
}

其输出可能看起来像
Enter two sentences to store in two different strings
Hello C#
Hello C++
The common prefix is "Hello C"

关于c++ - 我需要在C++中的两个字符串之间找到通用前缀,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59200269/

10-12 19:27