char copy, array[20]
printf("enter ..."):
scanf("%s", array);
if (strlen(array) > 20 )
{
strcpy(copy, array....);
如果输入超过20个字符,我需要做什么才能使它只抓取前20个字符
答案 0 :(得分:5)
char array[20+1];
scanf("%20s", array);
问题解决了。
答案 1 :(得分:3)
你的问题不明确,因为代码很少或根本没有意义。您的输入不能超过20个字符,因为接收阵列只有20个字符。如果用户输入更多,您的程序将产生未定义的行为。因此,这里的主要问题不是限制副本,而是限制输入。
但是,您的问题似乎是有限长度的字符串复制。如果这就是您所需要的,那么遗憾的是,标准库中没有用于此目的的专用功能。许多实现提供了非标准的strlcpy
函数。因此,请检查您的实施是否提供strlcpy
或自己实施strlcpy
。
在许多情况下,您可能会看到在这种情况下使用strncpy
的建议。虽然可以将strncpy
用于此目的,但实际上strncpy
并不打算以这种方式使用。使用strncpy
作为有限长度的字符串复制功能始终是错误的。避免它。
答案 2 :(得分:1)
使用strncpy
代替strcpy
。这里的所有都是它的。 (注意:如果目标字符串达到其限制,strncpy
不
编辑:我没有仔细阅读你的程序。如果用户输入超过20个字符,您将在scanf
呼叫时丢失。你应该打电话给fgets
。 (就我个人而言,我认为不应该使用* scanf - 就这些问题而言,这只是冰山一角。)此外,copy
只有一个角色,而不是二十个;但我会认为这是你的错字。
答案 3 :(得分:1)
或者,您不需要使用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'。
答案 4 :(得分:0)
使用strncpy。确保null终止目标。
答案 5 :(得分:0)
strncpy (copy, array, 20);
诀窍。例如,如果字符串是> 20个字符,则不会以空值终止!
http://www.cplusplus.com/reference/clibrary/cstring/strncpy/
答案 6 :(得分:0)
您需要更改scanf()调用,而不是strcpy()调用:
char copy[20], array[20];
printf("enter....");
scanf(%20s",array); // read a maximum of 20 characters
strcpy(copy, array);