繁体   English   中英

strcpy字符串数组

[英]strcpy string array

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 NUL终止目标字符串,如果它击中它的极限)

编辑:我没有仔细阅读你的程序。 如果用户输入超过20个字符,则您在scanf调用时已经丢失。 你应该打电话给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 确保null终止目标。

 strncpy (copy, array, 20);

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

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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM