首页 > 解决方案 > 将字符串数组作为字符指针传递

问题描述

我一直在尝试将字符串数组传递给函数。虽然我知道这样做的其他过程,但我特别想知道为什么这个特定代码不起作用

我尝试过以下方式

#include<stdio.h>

void check_number(char* str[])
{
    int sum=0;
    int i=0;
    while(str[0][i]!='/0')
    {
        char a='a';
        sum=sum+str[0][i]-(int)(a);
    }
    printf("number = %d ",sum);
}

int main()
{
    char* str[2];
    printf("Enter a string ");
    scanf("%s",str[0]);

    printf("Enter a string ");
    scanf("%s",str[1]);

    check_number(str);
    return 0;
}

标签: cstring

解决方案


这是发布的代码中的问题之一,here

char* str[2];

str两个字符指针的数组,str[0]即是str[1]字符指针,即它们需要使用有效地址进行初始化,但您没有为它们分配内存。

scanf("%s",str[0]); /* No memory allocated for str[0] */
scanf("%s",str[1]); /* No memory allocated for str[1] */

在将数据扫描到其中之前,您需要为str[0]&分配内存。str[1]例如

int main(void)
{
    char* str[2];
    for(int i = 0; i < 2 ; i++) {
        printf("Enter a string ");
        str[i] = malloc(MAX_BUF_SIZE); /*define this macro for no of bytes */
        scanf("%s",str[i]);
    }
    /* do some stuff */
    /* free dynamically allocated memory for each str[index] */
    return 0;
}

另一个问题在这里

while(str[0][i]!='\0') { /* '/0' --> '\0' */
    char a='a';
    sum=sum+str[0][i]-(int)(a); /* what you want to achieve here, please explain */
}

这个循环什么时候结束?应该有一个循环终止条件,否则它将无限循环。


推荐阅读