我是C的新手,想知道如何使用指针获取数组的每个元素。当且仅当您知道阵列的大小时,这很容易。 所以让代码为:
#include <stdio.h>
int main (int argc, string argv[]) {
char * text = "John Does Nothing";
char text2[] = "John Does Nothing";
int s_text = sizeof(text); // returns size of pointer. 8 in 64-bit machine
int s_text2 = sizeof(text2); //returns 18. the seeked size.
printf("first string: %s, size: %d\n second string: %s, size: %d\n", text, s_text, text2, s_text2);
return 0;
}
现在我想确定text
的大小。为此,我发现,String将以'\0'
字符结尾。所以我写了以下函数:
int getSize (char * s) {
char * t; // first copy the pointer to not change the original
int size = 0;
for (t = s; s != '\0'; t++) {
size++;
}
return size;
}
但是这个函数不起作用,因为循环似乎没有终止。
那么,有没有办法获得指针所指向的char
的实际大小?
答案 0 :(得分:4)
您必须检查当前值,而不是检查指针。你可以这样做:
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;
}
答案 1 :(得分:2)
此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 );
所以你的函数只是计算一个字符串的长度。
以下列方式(使用指针)定义它会更正确
size_t getSize ( const char * s )
{
size_t size = 0;
while ( *s++ ) ++size;
return size;
}