如何将argc和argv分配给全局变量?

时间:2019-04-19 01:39:08

标签: c

基本上我想将main的argc*argv[]传递给全局变量,但是却得到:

  

错误:args的类型char *[]不完整;

代码:

int argi;
char *args[];

int main(int argc, char *argv[]){
    argi = argc;
    args = argv;
    // blah bah blah
}

int foo(){
    printf("argv[0]: %s\n", args[0]);
    // ayy what it is.
}

注意:由于某种原因,我不想做foo(int argc, char *argv[]),然后主要将其称为foo(argc, argv);

准确地说,我需要将main的argcargv分配给我的全局变量。

2 个答案:

答案 0 :(得分:2)

即使数组和指针经常看起来是可转换的,它们也不是完全相等的。使用import React from "react" import PropTypes from "prop-types" //data import { allLibrarys } from '../data/librarys' //components import Card from "../Card" import SearchFilter from '../SearchFilter' class MainPage extends React.Component { constructor(props) { super(props) this.state = { librarys: [] } this.getLibrarys() } //Updates state with librarys getLibrarys = ()=>{ allLibrarys() .then((librarys)=>{ this.setState({ librarys }) }) .catch((error) => { this.setState({ error }) }) } //Edits cards handleUpdate = (library) => { fetch(`http://localhost:3000/libraries/${library.id}`, { method: 'PUT', body: JSON.stringify({library: library}), headers: { 'Content-Type': 'application/json' } }).then((response) => { this.updateLibrary(library) }) } updateLibrary(library){ let newLibrarys = this.state.librarys.filter((f) => f.id !== library.id) newLibrarys.push(library) this.setState({ librarys: newLibrarys }) } render () { const { activeIndex, librarys } = this.state const{ handleUpdate } = this return ( <React.Fragment> <SearchFilter /> {console.log(librarys)} <Card librarys={librarys} handleUpdate={handleUpdate}/> </React.Fragment> ); } } export default MainPage 而不是class MainController < ApplicationController before_action :force_json, only: :search def index; end def search @libraries = Library.ransack(title_cont: params[:q]).result(distinct: true).limit(5) end private def force_json request.format = :json end end (对于全局变量也是如此),然后它将起作用。

答案 1 :(得分:0)

有1个问题:

  1. argv数组类型在管理程序参数方面有严格的限制。

因此,最佳实践始终是使用argv参数数组的指针而不更改其数据结构:char **argv

这样,您可以轻松地在源代码中转移或使用该数组。


这是一个从您的代码段衍生而来的快速示例(在Debian OS上经过gccamd64测试):

#include <stdio.h>

int argi;
char **args;

int foo(void) {
    int i;

    for (i=0; i<argi; i++) {
        printf("argv[%d]: %s\n", i, args[i]);
    }
    printf("\n");
    return 0;
}

int main(int argc, char **argv) {
    argi = argc;
    args = argv;
    return foo();
}

如果编译并运行,应该获得以下信息:

u0:demo$ ./a.out 
argv[0]: ./a.out

u0:demo$ ./a.out one
argv[0]: ./a.out
argv[1]: one

u0:demo$ ./a.out one two
argv[0]: ./a.out
argv[1]: one
argv[2]: two

u0:demo$ ./a.out one two three
argv[0]: ./a.out
argv[1]: one
argv[2]: two
argv[3]: three

u0:demo$

UPDATE

Fri Apr 19 16:46:05 +08 2019

  • 消除了“字符串指针”问题,因为它无效,因为字符串指针字符串指针由char *variable而不是char *variable[]表示。