strcpy字符串数组

char copy, array[20] printf("enter ..."): scanf("%s", array); if (strlen(array) > 20 ) { strcpy(copy, array....); 

如果输入超过20个字符,我需要做什么才能使它只抓取前20个字符

使用strncpy而不是strcpy 。 这里的所有都是它的。 (注意:如果目标字符串达到其限制,则strncpy不会终止目标字符串。)

编辑:我没有仔细阅读你的程序。 如果用户输入超过20个字符,则您在scanf调用时已经丢失。 你应该打电话给fgets 。 (就我个人而言,我认为不应该使用* scanf – 这只是他们造成问题的冰山一角。)此外, copy只有一个角色,而不是二十个; 但我会假设这是你的错字。

 char array[20+1]; scanf("%20s", array); 

问题解决了。

你的问题不明确,因为代码几乎没有任何意义。 您的输入不能超过20个字符,因为接收arrays只有20个字符。 如果用户输入更多,您的程序将产生未定义的行为。 所以,这里的主要问题不是限制副本,而是限制输入。

但是,您的问题似乎是有限长度的字符串复制。 如果这就是您所需要的,那么遗憾的是,标准库中没有用于此目的的专用function。 许多实现提供了非标准的strlcpy函数。 因此,要么检查您的实现是否提供了strlcpy或者自己实现自己的strlcpy

在许多情况下,您可能会看到在这种情况下使用strncpy建议。 虽然有可能为了这个目的而击败strncpy ,但实际上strncpy并不打算以这种方式使用。 使用strncpy作为有限长度的字符串复制function始终是一个错误。 躲开它。

或者,您不需要使用strcpy只读取20个字符(并且您不必包含strings.h):

 char c; for( i = 0; i < 20; i++ ) { c = getchar(); if (c != '\n') array[i] = c; else break; } array[i+1] = '\0'; 

不要忘记将数组声明为char array[21]以确保包含'\ 0'。

  strncpy (copy, array, 20); 

诀窍。 如果字符串> 20个字符,则不会以null结尾!

http://www.cplusplus.com/reference/clibrary/cstring/strncpy/

使用strncpy 。 确保null终止目标。

您需要更改scanf()调用,而不是strcpy()调用:

 char copy[20], array[20]; printf("enter...."); scanf(%20s",array); // read a maximum of 20 characters strcpy(copy, array);