c/c++语言开发共享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] = ''; 

    不要忘记将数组声明为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

      (0)
      上一篇 2021年1月5日
      下一篇 2021年1月5日

      精彩推荐