记录·一个在计算字符串大小的时候遇到的一个坑。
如下代码:
int numJewelsInStones(char J[], char S[]){
int cnt = 0;
int temp = strlen(S);
int temp1 = strlen(J);
for (int i = 0; i < strlen(S); i++) { // 使用sizeof(S) - 1 替代strle(S)的时候会报错
for (int j = 0; j < strlen(J); j++) {
if (*(S + i) == *(J + j)) {
cnt++;
}
}
}
return cnt;
}
int main()
{
char J[] = {"aA"};
char S[] = {"aAAbbbb"};
printf("%d\n", numJewelsInStones(J, S));
return 0;
}
这是因为,在对于字符串进行计算长度的时候,用sizeof是运算符,在编译器编译环节就计算出来了,而当sizeof对指针进行计算时,计算的是存储该指针所占空间大小。
利用strlen计算字符串长度的时候,传入到strlen的一定是char*,即char类型的指针。当传入数组的时候,会自动传换为char类型的指针。
而sizeof传入数组的时候不会转换。
另外一个帖子记录的不错。
(C语言)计算字符串长度,使用 sizeof和strlen中的坑