我正在尝试使用C ++编写代码来完成我的任务。
我必须接受来自main和我的函数的一些数据的部分之一,我必须得到main发送的数组的第一部分并放入函数中的数组中。
for (int i = 0; i <= strlen(main) && exit == 0; i++){
if (main[i] != ';' || main[i] != '\0'){
keyword[i] = data[i];
if(main[i] == ';' || main[i] == '\0')
exit = 1;
}
这是名为main = "Hello World;Yes;No;Okay;Good Bye",
所以我想将Hello World
存储在名为keyword
的数组中,问题是我打印出关键字字符串后,我会在单词Hello World
之后看到额外的数据
这是我在printf上的内容
Your keyword-----> 'Hello World;? '
Actual keyword---> 'Hello World'
上面我的逻辑使用有问题吗?
由于
答案 0 :(得分:2)
i <= strlen(main)
需要i < strlen(main)
,并且if
中不需要额外的终止字符检查。复制必要数据后,还要确保keyword
为空终止(\0
)。
只是为了让你明白,假设目的地足够大,可以保存正在复制的数据。
for (int i = 0; i < strlen(main) ; i++)
if (main[i] != ';'){
keyword[i] = data[i]; // Copy the characters until `;` isn't found
} else {
keyword[i] = '\0' ; // If `;` found, null terminate the copied destination.
break;
}
}
答案 1 :(得分:1)
您看到的额外数据可能是空终止字符。 请注意您正在使用
i <= strlen(main)
所以这实际上打印了所有字符加上空终止。你应该把它改成
i < strlen(main)
一般来说,为了更好地理解你的工作,更多的代码真的会有所帮助。
但正如begemoth所说,看来你想做什么你的if()测试应该是:
if(main[i] != ';' && main[i] != '\0')
答案 2 :(得分:1)
条件
if (main[i] != ';' || main[i] != '\0')
总是如此,你想测试这个角色是不是';'也不是'\ 0',因此需要将测试与&&
运算符(and
)而不是||
(or
)连接起来。
一些注意事项:
strlen
函数具有O(N)复杂度,最好在循环之前调用它一次以确定字符串的长度或用*main[i]
替换测试。
exit
变量是多余的,请使用break
。