【发布时间】:2022-01-30 16:53:37
【问题描述】:
我的代码显示了问题 这行得通
char str[] = "asdf=1=2=3"; // this works
printf("type: %s\n", typename(str)); // prints 'pointer to char'
char *token = strtok(str, "=");
printf("%s\n", token);
这行不通,为什么?
char *str2 = "asdf=1=2=3"; // this wont work
printf("type: %s\n", typename(str2)); // prints 'pointer to char'
printf("%s\n", str2);
char *token2 = strtok(str2, "="); // segmentation fault
printf("%s", token2);
编辑:这是类型名宏
#define typename(x) _Generic((x), /* Get the name of a type */ \
\
_Bool: "_Bool", unsigned char: "unsigned char", \
char: "char", signed char: "signed char", \
short int: "short int", unsigned short int: "unsigned short int", \
int: "int", unsigned int: "unsigned int", \
long int: "long int", unsigned long int: "unsigned long int", \
long long int: "long long int", unsigned long long int: "unsigned long long int", \
float: "float", double: "double", \
long double: "long double", char *: "pointer to char", \
void *: "pointer to void", int *: "pointer to int", \
default: "other")
【问题讨论】:
-
您没有发布
typename宏或函数...应该修改它以区分 char 数组 和 指向 char 的指针,str不是。
标签: c string char string-literals chararray