【问题标题】:Copying 1D string into 2D array element将一维字符串复制到二维数组元素中
【发布时间】:2016-11-25 13:00:35
【问题描述】:

我正在开发一个程序,其中用一维字符串覆盖二维数组的一部分是算法的必要条件。

应该进行覆盖的部分如下:

char twoD[MAX][MAX];
int top=2;

int main(){
    char arr[MAX];
    func(arr);
}

void func(char newArr[]){
    strcpy(twoD[++top], newArr);
}

其中twoDtop 是全局变量。

每当程序到达这个部分时,它就会崩溃。

【问题讨论】:

  • 错误是什么?什么是预期的输入/输出?
  • 什么是MAX?请出示minimal reproducible example
  • 错误是:“程序已停止工作”。一些预期的输入:(5+3)*(7-3)。
  • strcpy 旨在复制以空字符结尾的字节字符串:此处数组的内容未初始化,因此字符串不是以空字符结尾的。正如@user3121023 建议的那样,试试char arr[MAX] = {'\0'};
  • 我尝试初始化它。现在它在函数调用时崩溃了!

标签: c arrays function strcpy


【解决方案1】:

注意数组边界。

char twoD[MAX][MAX];
int top=2;

int main(){
    char arr[MAX] = ""; //Initialize the string.
    func(arr);
}

void func(char newArr[]){
    if(++top < MAX) //Check if top has reached MAX.
    {
        strncpy(twoD[top], newArr, MAX-2); //At max copy string of length (MAX-2)+'\0'.
        twoD[top][MAX-1] = '\0';
    }
}

【讨论】:

    【解决方案2】:

    你没有初始化arr

    试试这个:

    int main() {
      char arr[MAX] = "HELLO";
      func(arr);
    
      printf("%s\n", twoD[3]);
    }
    

    输出将是:

    Hello
    

    免责声明:这是非错误检查代码,仅用于演示目的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-16
      • 2021-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多