【问题标题】:How to check each character in a dynamically allocated string array, in C?如何在C中检查动态分配的字符串数组中的每个字符?
【发布时间】:2014-11-16 05:09:37
【问题描述】:

所以我最终要做的是在一个数组中搜索一个名称,如果找到该名称,则返回该名称。好吧,要做到这一点,我需要检查每一行和每一列中的每个字符是否匹配。在我能做到这一点之前,我需要确切地知道如何去做,所以我试图弄清楚如何让动态数组打印出第一个字符,然后是第二个等等,以便将它与正在搜索的名称。但我在这样做时遇到了麻烦。所以我的问题是我将如何检查这样一个数组中的每个字符?我已经发布了大部分代码,但我认为我包括了我遇到的主要部分。提前感谢您的帮助。 我是 C 的初学者,如果我做错了什么,非常抱歉,谢谢!

 #include <string.h>
 #include <stdio.h>
 #include <stdlib.h>
 #define STRINGSIZE 20    
 int main(){
 char **firstNames, **lastNames;
 int classSize,i;
 char sample[21] = "Slack";
 printf("Please indicate number of records you want to enter (min 5, max 15):\n");
 scanf("%d", &classSize); 
 firstNames=malloc(classSize*sizeof(char*));
 for (i=0; i<classSize; i++) {
   firstNames[i]=malloc(STRINGSIZE*sizeof(char));
 }
 printf("Please input records of students (enter a new line after each record), with following    format: first name");
 *firstNames="Slack";
 printf("\n\n");
 printf("%c", *(sample));    //Will print out S
 printf("%c", **firstNames); //Will print out S
 printf("%c", *(sample+1));    //Will print out l
 printf("%c", **(firstNames+1)); //Will give error
 printf("%c", **(firstNames)+1); //Will print T (Next ascii char after 'S'
 printf("%c", **((firstNames)+1)); //Will give error
 }

【问题讨论】:

  • 对于“将给出错误”,你得到什么错误?
  • 线程 1:EXC_BAD_ACCESS(code=1, address=0x0)

标签: c arrays string dynamic comparison


【解决方案1】:

C 字符串是一个字符数组。即使是动态分配的,也可以这样对待,所以:

sample[0]; // S
sample[1]; // l
sample[2]; // a
// etc

您将多个指向 C 字符串的指针存储在 firstNames 中。您将其作为数组访问:

firstNames[0]; // first name
firstNames[1]; // second name
firstNames[2]; // third name
// etc.

现在你只需将它们组合起来,因为firstName[0] 只是一个 C 字符串,就像sample

firstName[0][0]; // first letter in first name
firstName[0][1]; // second letter in first name
firstName[1][0]; // first letter in second na,e
// etc.

【讨论】:

    【解决方案2】:

    您有一个指向 char firstNames 的指针数组,其大小为 classSize。此数组中的每个指针都指向您使用 malloc 分配的有效内存。

    您犯的错误是将字符串文字分配给数组firstNames 的第一个指针,用字符串文字的地址覆盖指针。这将丢失您分配的内存,并且字符串文字也无法修改,您稍后会导致程序崩溃。

    这行代码会将字符串“Slack”复制到数组中第一个指针指向的内存中:

    strcpy( firstNames[0] , "Slack" ) ;  //make sure you have enough space
    

    请注意,firstNames[0] 等于 *firstNames。

    for 循环中使用的i 没有在任何地方定义。

    【讨论】:

    • 我把代码分解了,忘了把定义的那一行,对不起!另外,感谢您对此的澄清。
    猜你喜欢
    • 2015-07-14
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多