我的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/