我在下面有一个函数的开头部分。我不必经常用C编码所以我非常生疏。我有一个名为arguments的参数。论证将作为" 10000 a"例如。我试图使用临时指针来获取第二个参数。我的问题是,当我添加它或甚至只是尝试设置它时,临时似乎没有移动或改变。如果我要运行这个
,下面是打印语句的结果参数地址:61fea4和ifNum的值:1
temp之前加1:61fe84
循环前的temp:61fe84
循环后的温度:61fe84我做错了什么?当它被设置为它时,为什么temp不与参数相同?
int mem_set(Cmd *cp, char *arguments){
char *p;
char *temp;
int ifNum = sscanf(arguments,"%x",&p);
printf(" arguments address : %x and value of ifNum: %d\n",&arguments, ifNum);
temp = &arguments;
printf(" temp before add 1 : %x\n",&temp);
temp = &arguments + 1;
printf(" temp before loop : %x\n",&temp);
while(*temp != ' '){
temp++;
}
答案 0 :(得分:1)
您没有看到任何更改,因为您打印的是temp
变量的地址
使用运算符&
,您将获得变量的地址而不是其值
无论如何,你的错误似乎是你认为使用你总是用&
运算符作为前缀的指针。
您指定变量是一个指针,只是将其声明为int *p;
,然后您只需使用它即可。现在要指向另一个指针,你必须简单地指定它int *p = p1;
您的代码将是:
int mem_set(Cmd *cp, char *arguments){
char p[100]; //You need an array here because you are storing data
char *temp;
int ifNum = sscanf(arguments,"%x",p);
printf(" arguments address : %x and value of ifNum: %d\n",arguments, ifNum);
temp = arguments;
printf(" temp before add 1 : %x\n",temp);
temp = arguments + 1;
printf(" temp before loop : %x\n",temp);
while(*temp != ' '){
temp++;
}
答案 1 :(得分:0)
试试这个:
int mem_set(Cmd *cp, char *arguments){
int p;
char *temp;
// Need to store hex value in an int so we need a pointer to an int
int ifNum = sscanf(arguments, "%x", &p);
printf(" arguments address : %p and value of ifNum: %d\n", arguments, ifNum);
// We want a temporary pointer that points to the same memory as arguments
temp = arguments;
printf(" temp before loop : %p\n", temp);
// Find the end of the hex value
while (*temp != ' ') {
temp++;
}
}
如果没有您的评论,很难猜出您在这里要做什么。但是,此代码至少可以让您在参数开头捕获十六进制值,并向您展示如何初始化和操作temp。