Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C中通过函数操作字符串数组?_C_Arrays_String - Fatal编程技术网

如何在C中通过函数操作字符串数组?

如何在C中通过函数操作字符串数组?,c,arrays,string,C,Arrays,String,我试图编写代码,使用函数从stdin读取42个字符串,同时知道我保存了多少字符串。 以下是我到目前为止的想法: #define rows 42 #define chars 101 void populate(int* citiesCount, char cities[][chars]); int main() { char cities[rows][chars]; //array of strings to store all lines of txt file int ci

我试图编写代码,使用函数从stdin读取42个字符串,同时知道我保存了多少字符串。 以下是我到目前为止的想法:

#define rows 42
#define chars 101

void populate(int* citiesCount, char cities[][chars]);

int main()
{
    char cities[rows][chars]; //array of strings to store all lines of txt file
    int citiesCount = 0; //how many lines there really are (may be less than 42)

    populate(&citiesCount, cities);

    //print all cities
    printf("NUMBER OF CITIES: %d\n", citiesCount);
    for(int i = 0; i < citiesCount; i++)
    {
        printf("CITY: %s\n", cities[i]);
    }
    printf("END\n");

    return 0;
}

void populate(int* citiesCount, char cities[][chars])
{
    char cntrl;
    for(int i = 0; i < rows; i++)
    {
        printf("%d\n", *citiesCount);
        scanf("%100[^\n]", &cities[*citiesCount++]); //read line of txt file and save it to array of strings
        printf("%s\n", cities[i]);
        cntrl = getchar(); //check, if I'm at end of file, if yes break loop
        if(cntrl == EOF)
            break;
    }
}
在本项目中,禁止使用动态内存分配

如果我试图编译代码,会出现以下错误:

“'%[^'要求参数的类型为'char*',但参数2的类型为'char(*)[101]'”


我尝试了所有可能的方法来处理它,但没有找到任何有效的方法。

如果您不太喜欢使用scanf,这一个应该会有帮助

void populate(int* citiesCount, char cities[][chars])
{
    for(int i = 0; ( i < rows ) && fgets( cities[i], chars, stdin) ; i++)
    {
        // remove there if not required.
        printf("%d\n", (*citiesCount)++ );
        printf("%s\n", cities[i]);

    }
}
void填充(int*citiesCount,char cities[][chars])
{
对于(int i=0;(i
scanf(“%100[^\n]”,&citiesCount[*citiesCount++]);
-->
scanf(“%100[^\n]”),cities[(*citiesCount)+++]);
我删除了符号,现在代码编译,但在第一行崩溃。@xing
*citiesCount++
在将*citiesCount替换为(*citiesCount之后应该是
(*citiesCount++
)++代码工作正常。谢谢。cntrl=getchar();返回int
void populate(int* citiesCount, char cities[][chars])
{
    for(int i = 0; ( i < rows ) && fgets( cities[i], chars, stdin) ; i++)
    {
        // remove there if not required.
        printf("%d\n", (*citiesCount)++ );
        printf("%s\n", cities[i]);

    }
}