基本上我想将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的argc
和argv
分配给我的全局变量。
答案 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个问题:
argv
数组类型在管理程序参数方面有严格的限制。 因此,最佳实践始终是使用argv
参数数组的指针而不更改其数据结构:char **argv
。
这样,您可以轻松地在源代码中转移或使用该数组。
这是一个从您的代码段衍生而来的快速示例(在Debian OS上经过gcc
,amd64
测试):
#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[]
表示。