Tag: printf

将指针打印到整数会导致分段错误。 为什么?

#include main() { int *num2=20; printf(“\n\n\n%d”,num2); } 当我按原样运行时,它打印20 。 如果我使用*num2 ,则会导致分段错误。 为什么?

将非空终止字符串传递给printf会导致意外值

这个C程序给出了一个奇怪的结果: #include #include int main(int argc, char *argv[]) { char str1[5] = “abcde”; char str2[5] = ” haha”; printf(“%s\n”, str1); return 0; } 当我运行这段代码时,我得到: abcde haha 我只想打印第一个字符串,从代码中可以看出。 为什么要打印它们?

用逗号printf连接变量

嗨,我有一个C程序,它有两个变量 int a = 1; int b = 2; 我想用printf打印的地方: 1,2 所以我可以将结果插入到csv文件中。 我试过了: printf(“f\n”,”f\n”, a,”,”,b); 但这不起作用。 如果我在不添加逗号的情况下尝试: printf(“f\n”,”f\n”, a,b); 它只打印出变量a。 所以真的有两个问题 – 如何在同一行打印出a和b,但更好的是如何用逗号分隔打印出来。 谢谢你的帮助!

关于如何理解printf(“%d \ n”,({int n; scanf(“%d”,&n); n * n;})); 在C中工作

我通过quora答案看到了这个程序 #include int main() { printf(“%d\n”, ( { int n; scanf(“%d”, &n); n*n; } )); return 0; } 我想知道这是如何工作的,如果这符合标准?

在C中重定向stdout时的奇怪行为

我正在尝试将stdout重定向到一个文件,然后在C中将其恢复为原始文件,但我面临以下奇怪的问题 – 下面的代码片段成功写入 in stdout in stdout 在stdout和相应in file中的文件中都可以。 #include #include #include #define STDOUT 1 int main(int argc, char* argv[]){ printf(“in stdout \n”); int old_out = dup(STDOUT); close(STDOUT); int fd = open(“./redirected”,O_CREAT|O_RDWR|O_TRUNC,0777); printf(“in file \n”); close(fd); dup(old_out); printf(“in stdout\n”); return EXIT_SUCCESS; } 但是,删除我的主要function的第一行: #include #include #include #define STDOUT 1 int main(int argc, char* argv[]){ int […]

如何在printf占位符中使用等于表达式?

我有以下代码片段: main( ) { int k = 35 ; printf ( “\n%d %d %d”, k == 35, k = 50, k > 40 ) ; } 产生以下输出 0 50 0 我不确定我是否理解printf的第一个值是如何变为0 。 当k的值与35比较时,理想情况下它应该返回(并因此打印)1,但它如何打印为零? 产生的其他两个值50和0都是正确的,因为在第二个值中,k的值取50 ,而对于第三个值,k的值( 35 )与40比较。 因为35 < 40 ,所以它打印0。 任何帮助将不胜感激,谢谢。 **更新** 在研究了关于这个主题以及undefined behavior ,我在一本关于C的书中看到了这一点,最后给出了源代码。 调用约定调用约定表示在遇到函数调用时参数被传递给函数的顺序。 这里有两种可能性: 参数可能从左向右传递。 参数可能从右到左传递。 C语言遵循第二顺序。 考虑以下函数调用: fun (a, b, […]

printf修改字符串

使用printf打印”\4unix\5lancs\2ac\2uk\0″我发现,而不是以♦unix♣lancs☻ac☻ukforms的打印,我得到垃圾( ♫ ,►E¦§Qh ↕ )。 我无法找到解释; 我使用以下方法来标记字符串: /** * Encode the passed string into a string as defined in the RFC. */ char * encodeString(char *string) { char stringCopy[128]; char encodedString[128] = “”; char *token; /* We copy the passed string as strtok mutates its argument. */ strcpy(stringCopy, string); /* We tokenise the string on […]

使用printf和scanf写入c不能按预期工作

所以我是C的新手。我正在使用带有MinGW编译器的eclipse。 我在第二章使用scanf和printf函数,我的程序正在运行,但只有在我将三个整数输入scanf函数后才将语句打印到控制台。 #include int main(void){ int length, height, width, volume, dweight; printf(“Enter the box length: “); scanf(“%d”, &length); printf(“\nEnter the box width: “); scanf(“%d”, &width); printf(“\nEnter the box height”); scanf(“%d”, &height); volume = length * width * height; dweight = (volume + 165) / 166; printf(“Dimensions: l = %d, w = %d, h = %d\n”, […]

mingw printf尺寸规格字符h

Visual Studio有一个大小和距离规格图表 ,我可以这样做,使用h前缀指定单字节字符串,无论printf还是wprintf: int main() { char test[]= “abc”; _tprintf(_T(“%hs\n”),test); } 但是,如果我使用mingw gcc和-Wall编译相同的内容,我会得到以下警告: warning: format ‘%hs’ expects type ‘short int *’, but argument 2 has type ‘char *’ 我在做什么是一种可接受的方式来在mingw中指定单字节字符串? 谢谢 编辑 – 此问题已在下面详细解答。 简短的回答是肯定的,这是在mingw中指定单字节字符串的可接受方式,并且可以忽略警告。

在汇编程序AMD64中,我调用fprintf,但它保持无限循环

我对fprintf有一个问题,我无法掌握。 也许你可以找到解决这个问题的方法。 你看,当我调用fprintf它开始无限循环,没有充分的理由。 我不知道这里发生了什么,所以也许你可以帮我一臂之力。 String_int: db 91; “[” db 37; “%” db 115;”i” db 93; “]” db 0; “end_string” w_IN_ASCII: db 119; “w” db 0; “end_string” mov rdi, FILE_LOCATION; mov rsi, w_IN_ASCII; call fopen; mov r15, rax; cmp r15, 0; (with this I can be sure it is not a NULL) je .endProgram; mov rdi, […]