【发布时间】:2013-04-27 05:50:19
【问题描述】:
我无法通过网络搜索找到任何信息。我应该去哪里看?
【问题讨论】:
-
man strncpy给你 -
@Ryan,或者留下它并提及它是 C++,因为他可能是这个意思。
我无法通过网络搜索找到任何信息。我应该去哪里看?
【问题讨论】:
man strncpy 给你
char myString[256]; // Input string
char dest[256]; // Destination string
strncpy(dest, myString, 10);
dest[10] = 0; // null terminate destination
【讨论】:
char source[] = "abcdefthijklmn";
char target[100];
strncpy(target, source, 10);
target[10] = '\0'; // IMPORTANT!
【讨论】:
strncpy 不会自动放置'\0'
char *target;。
char *a 和char a[100] 有点困惑
补充以上答案:
char* someString = "your string goes here";
int main()
{
int n = 10;
printf("(%.*s)\n", n, someString);
return 0;
}
【讨论】:
有许多不同的方法可以实现您的目标:
你可以使用snprintf(最安全):
char source[] = "abcdefthijklmn";
char target[100];
snprintf(target, sizeof target, "%.10s", source);
如果您知道目的地至少有 11 个元素,则可以使用 strncat:
char source[] = "abcdefthijklmn";
char target[100];
*target = '\0';
strncat(target, source, 10);
您可以使用strlen 和memcpy(关于目的地大小的相同假设):
char source[] = "abcdefthijklmn";
char target[100];
size_t len = strlen(source);
if (len > 10)
len = 10;
memcpy(target, source, len);
target[len] = '\0';
您可以使用循环(关于目标大小的相同假设):
char source[] = "abcdefthijklmn";
char target[100];
size_t i;
for (i = 0; i < 10; i++) {
target[i] = source[i];
}
target[i] = '\0';
【讨论】:
如果您正在寻找一个好的来源,这里有一个在线手册页示例,您可以使用: http://linux.die.net/man/3/strncpy
重要提示:您也可以使用 memcpy 代替 strncpy,但它需要您添加自己的空终止字节。
警告:如果 src 的前 n 个字节中没有空字节,则放在 dest 中的字符串不会以空值结尾。
因此,memcpy 和 strncpy 在这里的工作方式几乎相同,而且 memcpy 更高效且不易出错。
【讨论】:
我让它像这样工作。
# include <stdio.h>
# include <string.h>
//Strings. String lenght terminator.
//KHO2016.no1. mingw (TDM-GCC-32) . c-ansi .
int main ()
{
//declare
char src_str[20],dst_str[10];
//valuate
printf ("Enter a sentance of 20 letters\n");
gets (src_str);
strcpy (dst_str,src_str);
//calculate
dst_str [10] ='\0'; // from the "www.stack overflow"
printf ("%s",dst_str);
printf ("\n");
//terminate
return 0;
}
【讨论】:
您还可以使用sprintf 和.10 精度格式:
#include <stdio.h>
#include <string.h>
int main(void)
{
char source[] = "abcdefghijklmnopqrstuvwxyz";
char dest[11];
memset(dest, '\0', sizeof(dest));
sprintf(dest, "%.10s", source);
printf("%s", dest); // abcdefghij
return 0;
}
【讨论】: