str*_*ner 2 c segmentation-fault format-specifiers
我希望这会是我的argv的最后一个字母[1]:
$ cat input_string_fu.c
#include <stdio.h>
int main(int argc, char *argv[])
{
if (argc !=2){
printf("Error: Invalid syntax\n");
return 1;
};
int a;
a = strlen(argv[1]);
if (a >= 2){
printf("Last char of %s : %c\n", argv[1], argv[1][a-1] );
printf("Last char of %s : %s\n", argv[1], argv[1][a-1] );
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我很困惑为什么printf("%s")在argv [1] [a-1] segfaulting上.
$ ./a.out stackoverflow
Last char of stackoverflow : w
Segmentation fault
$
Run Code Online (Sandbox Code Playgroud)
感谢您的时间和专业知识!
编辑1:
感谢您的指导.TIL,printf("%s\n", argv[1][a-1]);是segfaulting,因为printf中的%s格式规范要求相应的参数是一个空终止的char数组.
或者,(1)传递一个指针:
printf("%s\n", &argv[1][a-1]);
Run Code Online (Sandbox Code Playgroud)
或者,如:
char *ptr = argv[1];
printf("%s\n", &ptr[a-1]);
Run Code Online (Sandbox Code Playgroud)
或者,(2)使用char:
printf("%c\n", argv[1][a-1]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
246 次 |
| 最近记录: |