C++ strncat函数c++;不起作用
我需要编写void strncat,它将源的第一个num字符附加到目标,再加上一个终止的null字符。如果源中的C字符串的长度小于num,则仅复制到终止空字符之前的内容。我做错了什么C++ strncat函数c++;不起作用,c++,string,C++,String,我需要编写void strncat,它将源的第一个num字符附加到目标,再加上一个终止的null字符。如果源中的C字符串的长度小于num,则仅复制到终止空字符之前的内容。我做错了什么 #include <iostream> #include <cstring> #include <string> using namespace std; const int MAXDESTINATION = 40; const int MAXSOURCE = 150; int
#include <iostream>
#include <cstring>
#include <string>
using namespace std;
const int MAXDESTINATION = 40;
const int MAXSOURCE = 150;
int main() {
char dest[MAXDESTINATION + 1] = "It don't mean a thing";
char src[MAXSOURCE + 1] = " if it don't got the Go-Go swing!";
int a = strlen(dest);
int b = strlen(src);
strncat(dest, src, MAXDESTINATION - a) ;}
void strncat(char destination[], const char source[], int num) {
if (int strlen(source) < num) {
int begin = 0;
bool less = false;
for (int i = 0; i <num; i++) {
if (destination[i] == '\0') {
begin = i;
less = true;
}
if (less == true) {
destination[begin] = source[i];
}
}
}
#包括
#包括
#包括
使用名称空间std;
const int MAXDESTINATION=40;
常量int MAXSOURCE=150;
int main(){
char dest[MAXDESTINATION+1]=“它没有任何意义”;
char src[MAXSOURCE+1]=“如果它没有开始摇摆!”;
int a=斯特伦(目的地);
int b=strlen(src);
strncat(dest,src,MAXDESTINATION-a);}
void strncat(字符目标[],常量字符源[],int num){
if(int strlen(源)
你也许想说
destination[begin++] = source[i];
或者您应该使用i
来代替,因为begin应该准确地跟踪i
,因为它初始化为i,然后应该在每次输入i时递增一次
此外,从效率的角度来看,您正在对源代码进行多次迭代。一次是调用strlen(必须遍历字符串中的每个字母才能对其进行计数),然后是for循环。您应该删除strlen。编译错误:
错误C1075:在左大括号“{”之前找到文件结尾
错误C496:“StnCAT”:这个函数或变量可能是不安全的。考虑使用STRNCATIOS。
我假设你谈论编译器错误。因为你所显示的代码将不会生成。如果发布关于生成错误的问题,总是在问题体中包括完整的和未编辑的生成输出,并标记代码行。错误是(带有注释)。@JoachimPileborg“如果源代码中的C字符串长度小于num,则仅复制到终止空字符的内容”听起来不像编译器错误我不知道什么If(int strlen(source)
是的,但是你不想把int
放在那里。这看起来像是一个函数声明,但我无法想象这是合法的。@xaxxon,这就是我的意思。所示的代码不会生成。很抱歉,它不允许我发布#include And之类的东西,因为它不算作代码?好的,谢谢,我会尝试一下,我会接受out strlen的int(源)为什么这不允许我将你的strncat返回void。你不能打印void。非常感谢你,我取出了cout,但当我尝试调试它时,它说仍然存在生成错误,即使它本身并没有阻止生成。你需要发布更新的代码以及特定的编译器错误。你可以其他问题或将新代码添加到您已有问题的底部。不要修改原始代码,否则任何注释/答案都没有意义。单击问题底部的“编辑”按钮并将其添加到此处,而不是发布答案。不过,我们需要查看生成此错误的新代码。此外,您还需要请不要将函数命名为strncat--请将其命名为..“my_strncat”或其他名称抱歉,我不知道您的意思,因为我以前已经编辑过它。发布的是显示这些编译错误的已编辑代码