C 将strlen()与数组整数或浮点一起使用

C 将strlen()与数组整数或浮点一起使用,c,C,有没有一种方法,我可以使用strlen()来查找数组的长度,而不是在循环中指定。 第一个代码:使用x

有没有一种方法,我可以使用strlen()来查找数组的长度,而不是在循环中指定。 第一个代码:使用x<4,这是temp[4]数组的大小

#include <stdio.h>
#include <string.h>

int main(){
    float temps[4] = {72.5, 73.4, 74.7, 75.2};
    int x;
    printf("Local Temperatures\n");
    for(x = 1; x < 4; x++){
        printf("Station %d: %.1f\n",x,temps[x]);
    }
}
#包括
#包括
int main(){
浮动温度[4]={72.5,73.4,74.7,75.2};
int x;
printf(“本地温度”);
对于(x=1;x<4;x++){
printf(“站点%d:%.1f\n”,x,temps[x]);
}
}
我的第二个代码,不起作用,但看看我试图用strlen()实现什么,以找到数组的大小:

#include <stdio.h>
#include <string.h>

int main(){
    float temps[4] = {72.5, 73.4, 74.7, 75.2};
    int x;
    float size;
    size = temps;
    printf("Local Temperatures\n");
    for(x = 1; x < strlen(size); x++){
        printf("Station %d: %.1f\n",x,size[x]);
    }
}
#包括
#包括
int main(){
浮动温度[4]={72.5,73.4,74.7,75.2};
int x;
浮子大小;
尺寸=温度;
printf(“本地温度”);
对于(x=1;x
简单的方法是通过
sizeof(temps)/sizeof(temps[0])获得数组的大小。

大概

for(x = 0; x < sizeof(temps)/sizeof(temps[0]); x++){
        printf("Station %d: %.1f\n",x,temps[x]);
    }
(x=0;x
注意:在代码段数组中,从1到(大小)进行访问,而不是从0到(大小-1),这是越界访问。

strlen
实际上是以下内容的优化版本:

size_t len = 0;
const char *p = s;
while (!*p) {
   ++len;
   ++p;
}
你可以很容易地适应它

size_t len = 0;
const float *p = s;
while (*p != 0.0) {
   ++len;
   ++p;
}
当然,这意味着您需要一个sentinel值,就像字符串一样

float temps[] = { 72.5, 73.4, 74.7, 75.2, 0.0 };
虽然您可以使用
0.0
以外的值作为sentinel值,但使用sentinel值可能并不可取,因此您可能不希望采用与字符串相同的方法

对于数组(与指针相反),可以使用以下方法确定数组中的元素数:

sizeof(a)/sizeof(*a)
这意味着您可以使用以下方法来确定
temps
中的元素数:

sizeof(temps)/sizeof(*temps)

只需这样做就可以得到浮点数组的长度

int main()
{
    float ar[4] = {1.1,1.2,1.3,1.4};
    float b;
    printf("Array Size : %d\n",sizeof(ar)/sizeof(b));
    return 0;
}
您将获得数组的元素总数,您可以在循环中进一步使用它来打印数组的元素。 注意:对于指针,不要使用sizeof。

简短回答:否

strlen
需要一个类型为
char*
的参数,该参数指向字符串的第一个字符,该字符串是包含零值终止符的字符值序列
strlen
返回终止符前的字符数:

/**
 * A naive implementation of strlen.  Actual implementations
 * are a little more clever.
 */
size_t strlen( const char *str )
{
  size_t count = 0;
  while( str[count] )
   count++; 
 return count;
}
重要的是要记住,
strlen
返回字符串的长度,而不是包含字符串的数组的大小。如果你有

char foo[1024] = “bar”;
strlen(foo)返回3

如果您试图将整数或浮点数组传递给strlen
,编译器会因为参数类型错误而对您大喊大叫。您可以通过将参数强制转换为
char*
,来解决这个问题,但仍然可能会得到错误的答案,这不仅是因为整型和浮点型是多个
char
s宽的,还因为这样的值可能有一个嵌入的零值字节。例如,整数值16表示为字节
0x00、0x00、0x00、0x10
。如果这是整数数组的第一个元素,那么
strlen
将在大端点平台上返回0,在小端点平台上返回1


如果定义了数组,那么就知道它有多大。如果要编写接收数组参数的函数,则必须将大小作为单独的参数接收,或者必须依赖数组中是否存在哨兵值。

strlen()将“const char*”类型的值作为参数。因此它不能用于整数或浮点数组。

strlen
用于字符串。为什么您认为它适用于任何其他数组类型?要获取数组的元素数,请执行以下操作:
sizeof temps/sizeof temps[0]
。如果启用所有编译器警告,编译器会输出什么?你需要这样做。您试图做的是不清楚的,并且它不是正确的C代码
strlen
仅用于字符*不能用于数组。2.temp只能从0到3进行索引,数组越界访问正在代码段中发生提示:
float temp[]=优于浮动时间[4]=
当您告诉人们使用
sizeof x/sizeof*x
获取数组大小时,建议他们仅对数组有效,而不是指针,以避免学生经常犯的错误。当您告诉人们使用
sizeof array/sizeof element
获取数组大小时,建议他们,它只适用于数组,不适用于指针,以避免学生经常犯的错误。