C 将strlen()与数组整数或浮点一起使用
有没有一种方法,我可以使用strlen()来查找数组的长度,而不是在循环中指定。 第一个代码:使用x<4,这是temp[4]数组的大小C 将strlen()与数组整数或浮点一起使用,c,C,有没有一种方法,我可以使用strlen()来查找数组的长度,而不是在循环中指定。 第一个代码:使用x
#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
获取数组大小时,建议他们,它只适用于数组,不适用于指针,以避免学生经常犯的错误。