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] = ' ';
不要忘记将数组声明为char array[21]
以确保包含' 0'。
strncpy (copy, array, 20);
诀窍。 如果字符串> 20个字符,则不会以null结尾!
使用strncpy 。 确保null终止目标。
您需要更改scanf()调用,而不是strcpy()调用:
char copy[20], array[20]; printf("enter...."); scanf(%20s",array); // read a maximum of 20 characters strcpy(copy, array);
以上就是c/c++开发分享strcpy字符串数组相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/541929.html