#include <stdio.h>
int main(void) {
char *t[10]={"Program", "hjl","juyy"};
int i;
//printf("%c \n",*t[3]);
int ch=*t[0];
for(i=0;*t[i]!='\0';i++){
printf("%d",i);
}
return 0;
}
程序在一段时间内停止工作。有人可以解释原因吗?
答案 0 :(得分:0)
如果我已正确理解您要输出的内容,则程序可以按以下方式查看。
#include <stdio.h>
int main(void)
{
char *t[10] = { "Program", "hjl", "juyy" };
for ( char **p = t; *p; ++p )
{
for ( char *q = *p; *q; ++q ) printf( "%d ", ( unsigned char )*q );
putchar( '\n' );
}
return 0;
}
它的输出是
80 114 111 103 114 97 109
104 106 108
106 117 121 121
由于数组被声明为具有10个元素并且仅使用三个初始化器显式初始化,因此数组的所有其他元素都由零初始化。您可以将此事实用作循环的条件。
答案 1 :(得分:0)
这样定义数组:
char *s[] = {
"text 1 ...",
"text 2 ...",
"text 3 ...",
NULL
};
执行函数以确定像这样的元素数量:
#include <errno.h>
ssize_t number_of_elements(const char ** p)
{
ssize_t e = -1; /* Be pessimistic. */
if (NULL == p)
{
errno = EINVAL;
}
else
{
char * t = p;
while (NULL != *t)
{
++t;
}
e = (ssize_t) (t - p);
}
return e;
}
这样称呼它:
#include <stdlib.h>
#include <stdio.h>
ssize_t number_of_elements(const char ** p)
int main(void)
{
int ec = EXIT_SUCCESS;
ssize_t e;
if (-1 == (e = number_of_elements(s)))
{
ec = EXIT_FAILURE;
perror("number_of_elements() failed");
}
else
{
prints("s has %zd elements.\n", e);
}
return ec;
}