我只是从C ++开始,所以在这里我可能会犯一个愚蠢的错误。以下是我的代码以及注释中的输出。我正在使用Xcode。
#include <iostream>
#include <string.h>
using namespace std;
int main() {
char myString[] = "Hello There";
printf("%s\n", myString);
strncpy(myString, "Over", 5); // I want this to print out "Over There"
cout<< myString<<endl; // this prints out ONLY as "Over"
for (int i = 0; i <11; i++){
cout<< myString[i];
}// I wanted to see what's going on this prints out as Over? There
// the ? is upside down, it got added in
cout<< endl;
return 0;
}
最佳答案
问题strncpy (destination, source, max_len)
strncpy被定义为最多将max_len
个字符从source
复制到destination
,如果source
的前max_len
个字节中不包含空字节,则包括尾随的空字节。
在您的情况下,将包含尾随的空字节,并且destination
将直接在"Over"
之后以空终止,这就是为什么您看到上述行为的原因。
因此,在您呼叫strncpy
myString
之后,其将等于:
"Over\0There"
解决方案
最直接的解决方案是不从
"Over"
复制尾随的空字节,就像将4
而不是5
指定到strncpy
一样容易:strncpy(myString, "Over", 4);
关于c++ - strncpy函数无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22599766/