如何在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 *
}
答案 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;
}
答案 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;
}