【发布时间】:2015-09-03 15:50:07
【问题描述】:
我正在尝试使用库函数查找字符串的长度。
char card[16]; //card number in char array.
unsigned int cardno[16]={0}; //card number in int array for calculations.
int i,length=0,len;
printf("Credit Card Number[without any spaces]: ");
gets(card);
for(i=0;card[i]!='\0';i++);
len=i;
length=strlen(card);
printf("%d %d",len,length);
但是如果我输入一个 16 位的卡号,输出是 16 17 但除此之外[卡号小于 16 位] 两个输出是相同的。 这是前后增量的影响还是其他一些东西。 请解释一下。
【问题讨论】:
-
您使用哪种编程语言?
-
@slartidan 我使用 C 语言。
-
不要使用 'gets()' 它已被贬低,在下一个 C 标准中被删除,它(以及其他问题)允许用户溢出输入缓冲区。强烈建议使用'fgets()'。超出输入缓冲区会导致未定义的行为,这可能/将导致段错误事件
-
在 C 中,字符串以 NUL 字符 ('\0') 结束。一张信用卡(通常)有 16 个数字。所以在读取值时,需要为 NUL 字符留出空间。 (并且当您使用 fgets() 时,还需要为结尾的 '\n' 留出空间(在大多数操作系统中是单个字符,但在 Windows/DOS 中是两个字符。
-
for 循环末尾的分号是一个非常糟糕的主意。我们无法判断这是一个错字(通常是),还是故意的。如果有意,请将分号单独放在一行。
标签: c post-increment pre-increment