【问题标题】:C strcpy() breaks when it is inside a function but not on main() [duplicate]C strcpy() 在函数内部但不在 main() 上时中断 [重复]
【发布时间】:2019-04-05 06:34:07
【问题描述】:

我想为每个位置初始化一个具有相同值的字符串数组。所以我正在尝试这段代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define TAM_VETOR 1009
#define QTD_PLACAS 1000

void inicializaVet(char * v[], int tamVet) {
    int i;
    for (i = 0; i < tamVet; i++) {
        printf("rodou %d\n", i);
        strcpy(v[i], "vazio");
    }
}

int main(void) {
    char vetor[TAM_VETOR][8];

    inicializaVet(vetor,TAM_VETOR);    

    return 0;
}

它不起作用,甚至无法复制到第一个位置。 (打印“rodou 0”然后中断)

geraArquivo() 正在工作。

我尝试将相同的代码放在主函数下并且它有效,我想我的错误是关于“inicializaVet”的参数类型?但我自己无法弄清楚。

【问题讨论】:

  • 只要知道,任何时候你认为“(在此处插入 C 函数)坏了”——坏的不是 C 函数......

标签: c arrays string strcpy


【解决方案1】:

gcc -W -Wall 提供警告:

tmp-test.c:7:27:注意:预期为“char **”,但参数类型为“char (*)[8]”

您可以将数组传递为

void inicializaVet(char  v[TAM_VETOR][8], int tamVet) 

或作为

void inicializaVet(char  v[][8], int tamVet) 

【讨论】:

  • ... 或 void inicializaVet(char (*v)[8], int tamVet),正如您的编译器所说。这个和你的两个都是 100% 等价的。
猜你喜欢
  • 2014-05-21
  • 1970-01-01
  • 2017-02-23
  • 1970-01-01
  • 2012-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多