标签: printf

为什么转换指针会改变地址处的值?

所以我正在做一个练习,看看我是否正确使用了 memset。

这是我编写的原始代码,它应该将一些地址设置为值 50:

int main(){
    int *block1 = malloc(2048);
    memset(block1, 50, 10);
    // int count = 0;
    for (int *iter = block1; (uint8_t *) iter < (uint8_t *)block1 + 10; iter = (int *) ((uint8_t *)iter + 1) ){
        printf("%p : %d\n", iter, *iter);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我希望内存中的每个地址都存储值 50。但是我的输出是:

(地址:值)

0x14e008800 : 842150450
0x14e008801 : 842150450
0x14e008802 : 842150450
0x14e008803 : 842150450
0x14e008804 : 842150450
0x14e008805 : 842150450
0x14e008806 : 842150450
0x14e008807 : 3289650
0x14e008808 : 12850
0x14e008809 …
Run Code Online (Sandbox Code Playgroud)

c printf pointers casting memset

0
推荐指数
1
解决办法
235
查看次数

什么是 _IO_stdin_used

有人可以解释一下_IO_stdin_used下面这一行的内容吗:

114a:   48 8d 3d b3 0e 00 00    lea    rdi,[rip+0xeb3]        # 2004 <_IO_stdin_used+0x4>
Run Code Online (Sandbox Code Playgroud)

抱歉这个菜鸟问题。

c++ assembly printf reverse-engineering x86-64

0
推荐指数
1
解决办法
921
查看次数

为什么这段代码打印的是“123”而不是 3?

我这里有一些代码:

int n = 0;
for(n = 1;n<4;n++)
printf("%d",n);
return 0;
Run Code Online (Sandbox Code Playgroud)

为什么它返回“123”而不是“3”?

我尝试用谷歌搜索这个问题,但找不到任何有用的东西。

c printf curly-braces

0
推荐指数
1
解决办法
110
查看次数

最后一个 printf 语句被跳过

插入所有值后,我期望最终的 printf 语句给出方程的最终结果

#include <stdio.h>
#include <stdlib.h>

int main(void) 
{
    char *carModel; 
    float tankRange; 
    float gasCost; 
    float costTank; 
    float gallonsTank; //gallons in full tank
    float mpg; //miles per gallon
    float costMile;

    carModel = malloc(256);

    printf("What is the model of car? " );
    scanf("%255s", &carModel);  // Don't read more than 255 chars
    printf("How many miles can be driven on a full tank? " );
    scanf("%f", &tankRange);
    printf("What is the gas cost per gallon? " );
    scanf("%f", &gasCost);
    printf("How much does it …
Run Code Online (Sandbox Code Playgroud)

c printf pointers scanf dynamic-memory-allocation

0
推荐指数
1
解决办法
54
查看次数

如何阻止 C 存储悄悄进入操作的值?

我编写了一个简单的程序,将两个数字相乘。当我将它与 scanf 输入相乘时,它会打印出随机答案......

#include<stdio.h>
int main()
{
    int a, b ,c = a * b;
    printf("Type two no.s to be multiplied, ensuring space between them");
    scanf("%d%d", &a, &b);
    printf("The required  output is = %d\n", c);
    return 0;

}

Run Code Online (Sandbox Code Playgroud)

当我输入 8 和 7 时,我得到 4897 作为我的答案,那么答案一定是 56。

c printf initialization scanf

0
推荐指数
2
解决办法
96
查看次数

printf 在分配空字符串时返回 6 而不是 0

为什么函数在将其作为字符串printf分配给它时返回 6 而不是 0 ,尽管它什么也没打印?NULL

int main(void)
{
    int x;
    x = printf("%s", NULL);
    printf ("\n%d", x);
}
Run Code Online (Sandbox Code Playgroud)

输出是:

(null)
6
Run Code Online (Sandbox Code Playgroud)

c printf null-string

0
推荐指数
1
解决办法
93
查看次数

为什么 printf("%c", 0.21) 结果是 'ß'?

所以,这是我的 C 代码。当我为了学习格式说明符而摆弄我的代码时,尤其是%c

\n
#include <stdio.h>\n\nvoid main()\n{\n    double a = 0.21;\n    printf("%c", a);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我碰巧遇到这样的情况:即使我将浮点值作为printf()格式说明符的函数参数传递%c,编译器(我的编译器是gcc)也会以某种方式将该值转换为与 ASCII 字符相对应的0.21十进制值。223\xc3\x9f

\n

对于a = 0.22输出为:)其 ASCII 表中的十进制值为29

\n

我在VS codeCLion IDE上运行了代码,但结果是相同的。现在这让我摸不着头脑好几天了,我无法弄清楚。

\n

我想知道值0.210.22是如何转换成十进制的22329或者它们如何分别对应于 ASCII 223 和 29 ie\xc3\x9f)

\n

由于值 0.21、0.22 不对应于任何 ASCII,因此我希望程序不会打印任何内容。

\n

但根据输出,我认为这可能与二进制文件有关。
\n由于二进制中的 0.21 是 0.00110101110000101000111101011100...
\n& 223 是 11011111 …

c printf format-specifiers

0
推荐指数
1
解决办法
157
查看次数

\n 不保留在缓冲区中吗?

为什么当我只使用整数时程序运行良好?当我为变量“a”插入一个数字然后按 Enter 键后,不会\n保留在缓冲区中吗?如果它确实存在,那为什么我b也可以初始化?如果我定义b为 char 那么b输出将是b 10;换句话说,换行符。例如,如果我想多次使用(使用什么?)为许多人输入一个名字,我会有什么问题吗?我需要一个清除缓冲区的函数吗?那么出了什么问题以及如何解决这个问题

#include <stdio.h>

int main() {
   int a,b;
   
  printf("a ");
  scanf("%d",&a);
  printf("a=%d",a);
  
  printf("\nb ");
  scanf("%d",&b);
  printf("b=%d",b);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c printf buffer ascii

0
推荐指数
1
解决办法
50
查看次数

-1
推荐指数
1
解决办法
1万
查看次数

在C中,如何附加到文件行而不是文件的末尾?

我有以下格式存储在文件中的用户名和推文:

USERNAME1:MESSAGE1:消息2:...:messageN

USERNAME2:MESSAGE1:消息2:...:messageN

...

usernameN:MESSAGE1:消息2:...:messageN

如果文件有一行,其中username ==带有新消息的用户名,我想将newMessage追加到上面格式化的行.

我如何使用C(如果重要的话,使用cygwin)这样做?这是我写的代码块,我遇到了麻烦.

         while(fgets(line, MAXBUFF, fp) != NULL){  // get each line of file
             if (strncmp(line, tweetUsr, strlen(tweetUsr)) == 0){
                 usrFound = 1;
                 fprintf(filePointer, ":");
                 fprintf(filePointer, tweet);
                 break;
             }

             memset(&line[0], 0, sizeof(line));  //reset line array
         }
Run Code Online (Sandbox Code Playgroud)

我期望发生的是将消息附加到行的末尾,因为filePointer应该指向当前行的末尾,但实际发生的是消息被附加到文件的末尾.

我在fopen中使用r +模式尝试了这个.为了能够追加当前行而不是文件末尾,我该怎么做?

c io printf

-1
推荐指数
1
解决办法
631
查看次数