18

我无法通过网络搜索找到任何信息。我应该在哪里寻找?

4

7 回答 7

24
char myString[256]; // Input string
char dest[256];     // Destination string

strncpy(dest, myString, 10);
dest[10] = 0; // null terminate destination
于 2013-05-02T22:08:39.963 回答
7
char source[] = "abcdefthijklmn";
char target[100];

strncpy(target, source, 10);
target[10] = '\0'; // IMPORTANT!
于 2013-05-02T22:09:37.590 回答
4

添加到上述答案:

char* someString = "your string goes here";

int main() 
{
  int n = 10;
  printf("(%.*s)\n", n, someString);

  return 0;
}
于 2016-12-04T13:10:11.493 回答
3

有许多不同的方法可以实现您的目标:

  • 您可以使用snprintf(最安全):

    char source[] = "abcdefthijklmn";
    char target[100];
    
    snprintf(target, sizeof target, "%.10s", source);
    
  • strncat如果您知道目的地至少有 11 个元素,则可以使用:

    char source[] = "abcdefthijklmn";
    char target[100];
    
    *target = '\0';
    strncat(target, source, 10);
    
  • 您可以使用strlenand 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';
    
  • 你可以但不应该使用strncpy()

于 2016-12-04T13:02:19.203 回答
0

如果您正在寻找一个好的来源,这里有一个在线手册页的示例,您可以使用: http: //linux.die.net/man/3/strncpy

需要注意的重要一点:您也可以使用 memcpy 代替 strncpy,但它需要您添加自己的空终止字节。

警告:如果 src 的前 n 个字节中没有空字节,则放在 dest 中的字符串不会以空值结尾。

因此,memcpy 和 strncpy 在这里的工作方式几乎相同,而且 memcpy 更高效且不易出错。

于 2013-05-02T22:12:08.697 回答
0

我让它像这样工作。

   # 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;
   }
于 2016-01-10T21:09:27.257 回答
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;
}
于 2016-12-04T12:00:29.187 回答