【问题标题】:How do I change index of array values with indexes that are null [duplicate]如何更改索引为空的数组值的索引[重复]
【发布时间】:2017-06-09 11:42:01
【问题描述】:

我可以使用包含 2 个索引的数组来执行此操作,但是当我有一个包含 3 个索引的数组时,它只会更改一个值的索引,而当我有 9 个索引时,我的验证会发出警报。

当我在一个 3 的数组中输入 11 来接收 011 时,我正在尝试这样的事情,但我得到了 101。

我一直在研究我的第二个函数,我在其中循环遍历索引以切换值。

int validateInt(int digitAmount);
char* validateCharAmount(int charAmount);

int main(void) {
    do{

        printf("Please enter Student's ID': ");
        studentID=validateInt(3);
    }while(studentID!=0);

    return 0;
}

int validateInt(int digitAmount)
{
    int value;
    char *entrySegments;    
    int index=0;
    char temp;
    entrySegments=validateCharAmount(digitAmount);
    while(index<digitAmount){
        while((entrySegments[index]-48)<0 || (entrySegments[index]-48)>9){
            printf("Invalid Value! Please input an integer: ");
            entrySegments=validateCharAmount(digitAmount);
            index=0;
        }
        value=10*value+(entrySegments[index]-48);
        index++;
    }
    printf("%d",value);
    return value;   
}

char* validateCharAmount(int charAmount){

    char entrySegments[charAmount];
    int index=0;
    entrySegments[0]= NULL;
    entrySegments[charAmount]= NULL;
    scanf("%s",entrySegments);
    while(entrySegments[charAmount]!=NULL){
        printf("You entered too many characters! Please input %d: ", charAmount);
        scanf("%s",entrySegments);      
    }
    while(index<charAmount){
        while((entrySegments[index])==NULL){        
            entrySegments[index]=entrySegments[index-1];
            entrySegments[index-1]=48;
        }
        index++;
    }   
    return entrySegments;
}

【问题讨论】:

  • 您正在返回一个指向 validateCharAmount 中的局部变量的指针。一旦函数返回,所有局部变量都将不复存在。指针不再有效。
  • 如果我有一个 2 的数组,它返回值就好了......
  • 不,这不好,它只是似乎喜欢它。未定义的行为(这是您所拥有的)包括看似正常工作的可能性。

标签: c arrays validation arrangeoverride


【解决方案1】:

entrySegmentsvalidateCharAmount 函数内的局部范围变量。

你不能把它返回给调用者,因为它的生命在函数结束时就结束了。

您可以使用malloc & co 函数来执行此操作。

此外,entrySegments[charAmount] 解决了超出范围的数组。最后可访问的项目是entrySegments[charAmount-1]

【讨论】:

  • 如果我有一个 2 的数组,它返回值就好了......
  • 这是未定义的行为,这意味着:如果它与 2 个元素一起使用,那么你很幸运。
  • 是没有在数组中进行值切换或者只是整体分析的问题
  • 这是问题所在,但您的代码中有很多问题。您正在考虑将一个字符数组作为指向字符串的指针数组。你应该先阅读一本好的 c 书籍来编写你想要的代码。
  • 明白了,但我真的不明白如何使用malloc,即使在阅读之后
猜你喜欢
  • 1970-01-01
  • 2019-07-14
  • 1970-01-01
  • 1970-01-01
  • 2015-11-10
  • 2021-10-11
  • 1970-01-01
  • 2020-07-09
  • 2017-08-20
相关资源
最近更新 更多