我想将一个字符串(char*)解析为C中的tm结构.是否有任何内置函数可以做到这一点?
我指的是C99标准中的ANSI C.
我是C的新手,所以我进入man stdlib.h,搜索"随机",看到它random()返回了long,因为它只是一个学习练习,以为我只是转换为int(而不是费心去查找一个返回int- rand()是一个).
无论如何,程序编译并正确运行.但:
$ gcc -std=c99 part1.c
part1.c: In function 'main':
part1.c:44:5: warning: implicit declaration of function 'random'
Run Code Online (Sandbox Code Playgroud)
如果我移除-std=99旗帜就会消失.这是"违规"代码:
int test6[1000];
for(i = 0; i < 1000; i++)
{
test6[i] = (int) random();
printf("it is %d\n", test6[i]); //check random() is working (it isn't seeded)
}
printf("%d\n", largest(test6, 1000));
Run Code Online (Sandbox Code Playgroud)
所以我只是想知道是否有人知道这是为什么,因为我认为这可能很有趣.
我正在寻找关于 C 标准(C99 和/或 C11)部分的一些说明,主要是关于identifiers的使用。
上下文是一个完整的 C99 标准库的实现,我希望它完全符合标准。
基本问题是:C 标准允许我在多大程度上声明标准中未列出的标识符/符号?
例如,让我们考虑isfinite来自math.h.
一个可能的实现可能是:
#define isinf( _x_ ) \
( \
( sizeof( _x_ ) == sizeof( float ) ) ? _c99_math_isinf_f( _x_ ) : \
( sizeof( _x_ ) == sizeof( double ) ) ? _c99_math_isinf_d( _x_ ) : \
_c99_math_isinf_l( _x_ ) \
)
int _c99_math_isinf_f( float x );
int _c99_math_isinf_d( double x );
int _c99_math_isinf_l( long double x );
Run Code Online (Sandbox Code Playgroud)
在这里,我需要声明显然不属于C …
我看到了以下一些复杂的函数定义。
void foo(double A[static 10]) {
double B[10];
}
Run Code Online (Sandbox Code Playgroud)
它是有效的 C 和 C++ 代码吗?它是 C99 或 C++ 标准引入的新语法吗?它的目的是什么?我应该什么时候使用它?这有什么必要?
我不断
函数“ execle”的隐式声明在C99中无效
编译下面的代码时。我想念什么?
#include <stdio.h>
#include <stdlib.h>
char *my_env[] = {"JUICE=PEACH and apple", NULL};
int main (int argc, char *argv[])
{
execle ("diner_info", "diner_info", "4", NULL, my_env);
printf ("Diners: %s\n", argv[1]);
printf ("Juice: %s\n", getenv("JUICE"));
return 0;
}
Run Code Online (Sandbox Code Playgroud) 如何检查我的结构something在 C99 中是否有成员?
#include <stdlib.h>
#include <string.h>
struct some {
char title[50];
char name[50];
};
int main() {
struct some s;
if (*s.something) { // Error: no member named 'something' in 'struct.some'
strcpy(s.something, "Hello");
}
}
Run Code Online (Sandbox Code Playgroud)
更新:
我不需要知道它在编译时是否存在,而是在构建的程序中。成员及其值将从文件中解析,然后在循环中消耗到结构中,但我需要确保它会跳过所有不存在的成员。
我被迫使用 IAR EW430 编译器 v7.12 用于嵌入式项目,它只正式支持 c99。
我希望能够通过任何方式以通用方式模拟 GCC 的语句表达式,而不是编写一堆专用的内联函数。
有没有办法实现这一目标?(也许使用 MACRO-wizardry?或者模拟 Lambda,或者一些允许这样做的隐藏编译器开关?)显然不是改变编译器。
具体来说,复合表达式的最后一条语句的结果应该同时携带其类型和值,而不是作为宏参数传入的那些。
我已经搜索了几个月,但我能得到的最接近的是令人印象深刻的图书馆,但这似乎是一个非常多的东西。
免责声明。我见过很多问题,包括几乎完全相同的代码片段,但似乎没有人回答这个问题。
对于入门级 CS 课程,我们的任务是制作一个简单的程序,该程序接受用户输入的 ID、姓名和年龄并将其保存到文件中。这很简单,我很快就让它工作了。问题是,为了得到一部分,名称输入,正常工作,我不得不“欺骗”我遇到的问题。
有问题的代码片段。
int id, age;
char name[40]={0};
printf("ID: ");
scanf("%i",&id);
printf("Name: ");
scanf("%*c");
scanf("%[^\n]%*c",name);
printf("Age: ");
scanf("%i",&age);
Run Code Online (Sandbox Code Playgroud)
这工作正常。但是这条线让我很恼火;scanf("%*c");它的唯一目的是处理'\n'潜伏在流中的字符,可能来自先前的输入。出于某种原因,我觉得这是作弊,或者如果我必须使用这种解决方法,我做错了什么。任何提示表示赞赏。
我在 SO 上找到了一个答案,建议使用以下解决方案来重新初始化 c 中的数组。
int *foo = (int[]){1,2,3,4,5};
Run Code Online (Sandbox Code Playgroud)
我不确定这样的语法到底会做什么,我有几个问题:
如果我的数组是之前创建的,它会导致内存泄漏吗?
double *my_array = (double[]){1.1, 2.2, 3.3, 4.4, 5.5};
...
my_array = (double[]){-1.1, -2.2, -3.3}; // Do i need to call free(my_array) first?
Run Code Online (Sandbox Code Playgroud)
是否允许在函数调用中使用这种方法?
void foo(int *arr)
{
arr = (int[]){-2, -7, 1, 255};
}
int main()
{
int *my_array = (int[]){1, 2, 3};
foo(my_array);
if (my_array[2] != 1)
return -1;
}
Run Code Online (Sandbox Code Playgroud)
概括: