是否可以打印结构名称?
说我有一个结构:
typedef struct someName{
uint16_t value;
uint16_t field;
} someName_t;
someName_t test;
printf("%" PRIu16 "\n", test;
printf("%" PRIu16 "\n", test.value);
Run Code Online (Sandbox Code Playgroud)
打印test.value是oke.打印测试给了我警告..这是打印结构名称的正确方法,它甚至可以在C中使用吗?
首先PRIu16是我在stackoverflow上找到的,这是打印uint16_t的正确方法.
我想打印名称someName_t.
#include <stdio.h>
int main()
{
int i;
int buf[10];
char *p ;
p = 4;
printf("%d",p);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
4
怎么会是4?我期待一些地址价值.你能帮我理解一下吗?
当我尝试使用printf()函数在C中显示int时,我遇到了一些奇怪的麻烦.这是我正在使用的代码
printf("To compute pi enter n: ");
int n_term = 1;
printf("n: %d \n", &n_term);
scanf("%d", &n_term);
printf("n: %d", &n_term);
Run Code Online (Sandbox Code Playgroud)
我意识到存在一个问题,因为当我尝试简单地将n_term打印回用户时,甚至在他们为n_term输入任何值之前,它就会出现这个巨大的数字,2686776.任何有关此问题的见解都会非常感激.我正在使用gcc编译器,如果这有任何区别.
#include <stdio.h>
void myPrint (int n) {
printf("%d", n/2);
if(n > 0)
myPrint (n - 1);
printf("%d", n);
}
int main (void) {
int count = 4;
myPrint (count);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这个简单的打印程序打印2110001234,有人请解释为什么最后打印01234.我不知道为什么每次都加1.
我这里有这个C程序代码,它确定了数组的最高连续值:
#include <stdio.h>
int inputs[8];
int calcSum(int i, int j);
int main(void) {
int i, j, maxSum = 0, tempSum = 0;
int length = sizeof(inputs)/sizeof(inputs[0]);
for(i=0;i<length;i++) {
scanf("%d", &inputs[i]);
}
for(i=0;i<length;i++) {
for(j=i;j<length;j++) {
tempSum = calcSum(i,j);
if(tempSum > maxSum) {
maxSum = tempSum;
}
}
}
printf("%d\n", maxSum);
return 0;
}
int calcSum(int i, int j) {
int c, sum;
for(c=i;c<=j;c++) {
sum+=inputs[c];
}
return sum;
}
Run Code Online (Sandbox Code Playgroud)
尽管这段代码看起来对我来说是正确的,但它会输出错误的结果.采样加入任何形式的printf("")(可以是空的也一样)之间tempSum = ...,并if(tempSum >...)将使代码输出所有测试用例正确的答案.我甚至从头开始重写了整个代码,但仍然遇到了同样的问题.例如,数字序列:5 2 …
我将一些非常临时的调试打印放到各种用户空间程序中,以确定哪些代码在嵌入式Linux设备上运行,我希望这些打印文件写入文件而不会让它打开.为了使调试在各种程序之间更容易移植,最好有一个可以打开文件,写入文件并关闭它而不必在别处定义函数/宏的单行程序.我可以这样做:
{ FILE *f = fopen("filename", "a"); if (f) { fprintf(f, "DEBUG MSG\n"); fclose(f); } else printf("File open error!\n"); }
Run Code Online (Sandbox Code Playgroud)
这只是删除空格:
{
FILE *f = fopen("filename", "a");
if (f) {
fprintf(f, "DEBUG MSG\n");
fclose(f);
}
else
printf("File open error!\n");
}
Run Code Online (Sandbox Code Playgroud)
但这感觉不必要复杂.有没有更简单的方法来做到这一点?同样,我不是在谈论使它成为一个函数,因为我希望它可以在不同的程序之间进行复制/粘贴而不必每次都定义一个函数.它基本上是用户空间的临时printk等价物.
这个作弊编译并在NetBeans中运行得很好.然而,由于几个不同的原因,它似乎可能不合法.或者是吗?在某些情况下,它可以使代码更紧凑.只是好奇.
System.out.printf("%-20d John Smith %n", 12);
Run Code Online (Sandbox Code Playgroud)
......这给了我:
12 John Smith
Run Code Online (Sandbox Code Playgroud) 我只是在阅读"C接口和实现".书中描述了一些非常有趣的概念.有时(在我看来)代码非常难看,但现在我有一个关于将整数/长转换为字符串(char数组)的问题.书中描述的是:
const char *Atom_int(long n) {
char str[43];
char *s = str + sizeof str;
unsigned long m;
if (n == LONG_MIN)
m = LONG_MAX + 1UL;
else if (n < 0)
m = -n;
else
m = n;
do
*--s = m%10 + '0';
while ((m /= 10) > 0);
if (n < 0)
*--s = '-';
return Atom_new(s, str + sizeof str - s);
}
Run Code Online (Sandbox Code Playgroud)
因为没有描述为什么使用这个函数的方式......我想知道为什么它不仅仅是简单的东西:
const char *Atom_int(long n)
{
char str[43];
char *s = str;
sprintf(str, …Run Code Online (Sandbox Code Playgroud)