Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C使用指针遍历字符数组_C_Arrays_String_Pointers_Sizeof - Fatal编程技术网

C使用指针遍历字符数组

C使用指针遍历字符数组,c,arrays,string,pointers,sizeof,C,Arrays,String,Pointers,Sizeof,我是C语言的新手,想知道如何使用指针获取数组的每个元素。这很容易,只要你知道数组的大小。 因此,让代码成为: #包括 现在我想确定文本的大小。为此,我发现字符串将以'\0'字符结尾。因此,我编写了以下函数: intgetsize(char*s){ char*t;//首先复制指针以不更改原始 int size=0; 对于(t=s;s!='\0';t++){ 大小++; } 返回大小; } 但是,此函数不起作用,因为循环似乎没有终止 那么,有没有办法获得指针指向的字符的实际大小?而不是检查指针,您

我是C语言的新手,想知道如何使用指针获取数组的每个元素。这很容易,只要你知道数组的大小。 因此,让代码成为:

#包括

现在我想确定
文本的大小。为此,我发现字符串将以
'\0'
字符结尾。因此,我编写了以下函数:

intgetsize(char*s){
char*t;//首先复制指针以不更改原始
int size=0;
对于(t=s;s!='\0';t++){
大小++;
}
返回大小;
}
但是,此函数不起作用,因为循环似乎没有终止


那么,有没有办法获得指针指向的
字符的实际大小?

而不是检查指针,您必须检查当前值。您可以这样做:

int getSize (char * s) {
    char * t; // first copy the pointer to not change the original
    int size = 0;

    for (t = s; *t != '\0'; t++) {
        size++;
    }

    return size;
}
或者更简洁地说:

int getSize (char * s) {
    char * t;    
    for (t = s; *t != '\0'; t++)
        ;
    return t - s;
}

这个for循环中有一个输入错误

for (t = s; s != '\0'; t++) {
            ^^^^^^^^^          
我想你是说

for (t = s; *t != '\0'; t++) {
            ^^^^^^^^^          
然而,通常情况下,该函数不提供与运算符
sizeof
返回的值相等的值,即使您也要计算终止零。相反,它提供了一个与标准函数
strlen
返回的值相等的值

例如,比较此代码段的输出

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

//...

char s[100] = "Hello christopher westburry";

printf( "sizeof( s ) = %zu\n", sizeof( s ) );
printf( "strlen( s ) = %zu\n", strlen( s ) + 1 );

不幸的是,这并没有改变结果中的任何东西。无论我是否使用
s!='\0'
*s!='\0'
t!='\0'
*t!='\0'
,它仍然没有终止…您正在重新实现strlen
。您的函数没有使用
s
,所以保留“原始”值有什么意义?唯一的问题是,它总是少返回一个字符。所以最后加上+1就行了。仅当字符串开始时不是空的。但是谢谢!Ima现在就解决它:DAlso,如果您使用的是空循环,那么可以通过使用空大括号来更容易地检测,例如,
for(t=s;*t;t++){}
(您至少将
';
移动到了它自己的一行,这很好)
#include <string.h>
#include <stdio.h>

//...

char s[100] = "Hello christopher westburry";

printf( "sizeof( s ) = %zu\n", sizeof( s ) );
printf( "strlen( s ) = %zu\n", strlen( s ) + 1 );
size_t getSize ( const char * s ) 
{
    size_t size = 0;

    while ( *s++ ) ++size;

    return size;
}