gpt4 book ai didi

arrays - 如何在 C 中打印出未知大小的字符串数组?

转载 作者:太空宇宙 更新时间:2023-11-04 01:54:53 28 4
gpt4 key购买 nike

例如,我想打印出一个未知大小的字符串数组{"Green", "Yellow", "Black", "White", "Purple", "Saphire", .....} 并且可能没有 NULL 结尾。我的代码如下:((char **) 必须是 PrintStringArray 的参数)

void PrintStringArray(char **list) {
int i = 0;

for (;; i++) {
char *p = list[i];
while (*p)
putchar((*p++));
putchar('\n');
}
}

void main()
{
char *list[] = {"Green", "Yellow", "Black", "White", "Purple", "Saphire"};
PrintStringArray(list);
return;
}

但结果是,
绿色
黄色
黑色
白色
紫色
蓝 gem
段错误(核心已转储)
我怎样才能避免段错误?我可以听听你的意见吗?谢谢,

最佳答案

指针不保留信息,无论它们是指向单个对象还是例如数组的第一个元素。

考虑以下代码片段

char *p;

char c = 'A';

p = &c;

putchar( *p );

char s[] = "ABC";

p = s;

putchar( *p );

因此您必须为自己提供有关指针是否指向数组元素的信息。

您可以通过两种方式做到这一点。第一个是指定序列中第一个元素被指针指向的元素的数量。或者序列必须像字符串一样具有标记值。

例如

int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };

for ( int *p = a; p < a + sizeof( a ) / sizeof( *a ); ++p )
^^^^^^^^^^^^^^^^^^^^^^^^^^
{
printf( "%d ", *p );
}
printf( "\n" );

或者

int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };

int *p = a;

do
{
printf( "%d ", *p );
} while ( *p++ != 0 );
^^^^^^^^^

printf( "\n" );

这些代码片段可以写成函数

void f( int a[], size_t n ) 
{
for ( int *p = a; p < a + n; ++p )
{
printf( "%d ", *p );
}
printf( "\n" );
}

或者

void f( int a[] )
{
int *p = a;

do
{
printf( "%d ", *p );
} while ( *p++ != 0 );

printf( "\n" );
}

打印字符串数组的方式相同。您将自己明确报告数组中元素的数量。或者您可以使用标记值,例如空指针或空字符串。

例如

#include <stdio.h>

void PrintStringArray( char *s[], size_t n )
{
for ( char **p = s; p < s + n; ++p )
{
puts( *p );
}
printf( "\n" );
}

int main( void )
^^^^^^^^^^^^^^^^
{
char *list[] =
{
"Green", "Yellow", "Black", "White", "Purple", "Saphire"
};

PrintStringArray( list, sizeof( list ) / sizeof( *list ) );

return 0;
}

或者

#include <stdio.h>

void PrintStringArray( char *s[] )
{
char **p = s;

while ( *p != NULL )
{
puts( *p++ );
}

printf( "\n" );
}

int main( void )
^^^^^^^^^^^^^^^^
{
char *list[] =
{
"Green", "Yellow", "Black", "White", "Purple", "Saphire", NULL
^^^^
};

PrintStringArray( list );

return 0;
}

关于arrays - 如何在 C 中打印出未知大小的字符串数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35937860/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com