char copy, array[20]
printf("enter ..."):
scanf("%s", array);
if (strlen(array) > 20 )
{
strcpy(copy, array....);
如果输入的长度超过 20 个字符,我需要做什么才能让它只抓取前 20 个字符
char array[20+1];
scanf("%20s", array);
问题解决了。
您的问题不清楚,因为代码几乎没有意义。您的输入不能超过 20 个字符,因为接收数组只有 20 个字符。如果用户输入更多,您的程序将产生未定义的行为。所以,这里的主要问题不是限制复制,而是限制输入。
但是,您的问题似乎是关于有限长度的字符串复制。如果这就是您所需要的,那么不幸的是,标准库中没有为此目的的专用函数。许多实现提供了非标准的strlcpy
功能来做到这一点。因此,请检查您的实现是否提供strlcpy
或strlcpy
自己实现。
在许多情况下,您可能会看到strncpy
在这种情况下使用的建议。虽然有可能strncpy
为此目的而工作,但实际上strncpy
并不打算以这种方式使用。用作strncpy
有限长度的字符串复制函数总是错误的。躲开它。
使用strncpy
而不是strcpy
. 这里的所有都是它的。(注意:如果目标字符串达到其限制,则不会strncpy
终止目标字符串。)
编辑: 我没有仔细阅读您的程序。scanf
如果用户输入超过 20 个字符,您已经输掉了通话。你应该打电话fgets
。(我个人认为 *scanf 永远不应该使用 - 这只是冰山一角,就它们引起的问题而言。)此外,copy
它只能容纳一个字符,而不是二十个字符;但我会假设这是你的错字。
或者,您不需要使用 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。确保为空终止目的地。
strncpy (copy, array, 20);
成功了。除了大于 20 个字符的字符串不会以空字符结尾!
http://www.cplusplus.com/reference/clibrary/cstring/strncpy/
您需要更改您的 scanf() 调用,而不是您的 strcpy() 调用:
char copy[20], array[20];
printf("enter....");
scanf(%20s",array); // read a maximum of 20 characters
strcpy(copy, array);