在c中定义和迭代字符串数组

时间:2011-07-25 05:55:46

标签: c

如何在c中定义一个字符串数组,然后循环遍历数组中的项?

到目前为止我已经

char myStrings[][10] = { "one", "two", "three", "four", "five" };
// do I need to specify the "10" maximum length?
// also does it automatically create a null ending character after the string?

int i = 0;
for( i = 0; i < ; i++)
{
// I need to pass each string to  a function which accepts
// const char *
}

9 个答案:

答案 0 :(得分:11)

当您使用""声明char序列时,会添加null终止符。

char myStrings[][10] = { "one", "two", "three", "four", "five" };

size_t i = 0;
for( i = 0; i < sizeof(myStrings) / sizeof(myStrings[0]); i++)
{
    fooThatReceivesOneString(myStrings[i]);
}

答案 1 :(得分:7)

void loopftn (void)
{
  char *numbers[] = {"One", "Two", "Three", ""}, **n;

  n = numbers;
  while (*n != "") {
    printf ("%s\n",  *n++);
  }
  return;
}
  1. 您不需要最大长度。
  2. C中的所有字符串都以空值终止。

答案 2 :(得分:2)

  

我是否需要指定“10”最大长度?

是的,除了数组的第一维之外,您还需要提及所有后续维度

  

它会自动创建一个空结尾字符   字符串?

  

我需要将每个字符串传递给接受const char *

的函数

您可以像这样传递每个字符串:

for( i = 0; i < ; i++)
{
  foo(myStrings[i]);
}

此外,您可以选择const char*char*;因为你已经将它声明为数组,所以它是可修改的;它有点像

const char *mystrings[] = { " ", " "}; // string literal

然后您必须将其作为const char*传递,因为字符串文字应始终为const char*

答案 3 :(得分:1)

ad 1)您需要指定长度

ad 2)是的,字符串文字是空的。

在你的for中,只需使用参数myStrings [i]调用该函数。

答案 4 :(得分:1)

在C中,如上所示的声明** n!=“”,乍一看是非法的。它将指针与字符串进行比较。即使* n!=“”,也会将字符串的指针与“”堆栈字符串指针进行比较,而不是字符串。应该使用strcmp或比较第一个字符** n =='\ 0'或** n == 0。 另外+ * n增加指向字符串中的字符int,而不是指向字符串...

的指针

这是一个很好的实现:

代码:

static const char* strings[]={"asdf","asdfasdf",0};
const char** ptr = strings;
while(*ptr != 0)
{
   printf("%s \n", *ptr);
   ++ptr;
}

答案 5 :(得分:0)

是的,您需要指定长度,或添加NULL条目作为字符串数组中的最后一个条目。 C不会自动为您执行此操作。

答案 6 :(得分:0)

试试这个..

int j =0;
while (char myStrings[][j] !='\0'){
  i++;
}
for (i = 0; i < j; i++)    {
  somemethod(myStrings[][i]);
}

答案 7 :(得分:0)

我总是这样做,看起来很优雅,也很容易 你只需像往常一样定义一个数组,没有固定的索引 所有你必须确保在最后添加一个0 然后,您可以使最短的TEST案例成为可能,并使用for或while迭代它。

这是一个例子,它显示了一个选项列表和拟合帮助元素(在这种情况下,帮助数组至少需要与选项一一样。

const char *options[]={
    "CAL_MAG_MIN",
    "CAL_MAG_MAX",
    0
    };
const char *help[]={
    "<X,Y,Z>",
    "<X,Y,Z>",
    0
    };

int pos;
for (pos=0;options[pos];pos++)
{
    printf("\t %s %s\n",options[pos],help[pos]);
}

答案 8 :(得分:0)

这可能会有所帮助

int main()
{
  int upp;

  int num;
  char password[20];
  int i;

  printf("Enter a Password (Must include a special char, a number, and an uppercase letter): \n");
  scanf(" %s", password);

  for (i=0;i<strlen(password);i++){
    if (isupper(password[i])){
      upp=1;

    }else if (isdigit(password[i])){
      num=1;
    }
  }if (num==1 && upp==1){
    printf("u may enter");
  }else
  printf("try again");

  return 0;
}