4

我的目标是将字符串转换为"A1234"带有long值的字符串1234。我的第一步是转换"1234"为 a long,并且按预期工作:

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
    char* test = "1234";
    long val = strtol(test,NULL,10);
    char output[20];
    sprintf(output,"Value: %Ld",val);
    printf("%s\r\n",output);
    return 0;
}

现在我遇到了指针问题,并试图忽略A字符串开头的 。但是,我尝试过char* test = "A1234"; long val = strtol(test[1],NULL,10);使程序崩溃。

如何正确设置它以使其指向正确的位置?

4

1 回答 1

8

你几乎是对的。但是,您需要将指针传递给strtol

long val = strtol(&test[1], NULL, 10);

或者

long val = strtol(test + 1, NULL, 10);

打开一些编译器警告标志会告诉你你的问题。例如,来自 clang(即使没有添加特殊标志):

example.c:6:23: warning: incompatible integer to pointer conversion passing
      'char' to parameter of type 'const char *'; take the address with &
      [-Wint-conversion]
    long val = strtol(test[1],NULL,10);
                      ^~~~~~~
                      &
/usr/include/stdlib.h:181:26: note: passing argument to parameter here
long     strtol(const char *, char **, int);
                            ^
1 warning generated.

来自海湾合作委员会:

example.c: In function ‘main’:
example.c:6: warning: passing argument 1 of ‘strtol’ makes pointer from integer 
without a cast

编者注:我认为您可以从这些错误消息中看出为什么建议初学者经常使用 clang 而不是 GCC。

于 2013-07-26T14:27:06.453 回答