小编Esm*_*elE的帖子

检查函数的返回值而不返回return语句

使用下面的例子,请解释为什么有时候不需要return语句?函数具有返回类型,但缺少return语句.同时,程序编译和工作正常.

请帮助我更好地理解这一点

char* handleInput() {
    fgets(buffer, 1024, stdin);
**//    return buffer;**       <---- COMMENTED RETURN
}

void main() {
        char* ptr = handleInput();
        int flag = atoi(ptr);    
        if (flag < 0) break;    
        printf("You entered: %s\n", ptr);
}
Run Code Online (Sandbox Code Playgroud)

c return-value

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

C中scanf函数的格式说明符中%c规范之前的空格

的时候,不包括%d和%C规范之间的空白在scanf函数的在下面的程序格式字符串,并在运行时间期间为"4小时"给输入,则输出是"整数= 4和字符= .

在这种情况下,变量"c"如何获取输入,如果我在%d和%c规范之间包含空格,它会有什么不同?

#include <stdio.h>

int main()
{
    char c;
    int i;
    printf("Enter an Integer and a character:\n");
    scanf("%d %c",&i,&c);
    printf("Integer = %d and Character = %c\n",i,c);
    getch();
} 
Run Code Online (Sandbox Code Playgroud)

c scanf character format-specifiers

2
推荐指数
1
解决办法
1499
查看次数

在Shell脚本中调用MySQL存储过程

想要在shell脚本中执行MYSQL存储过程

示例:Employee_config ('ClientId','Data')是 mysql 中的过程名称。

当我尝试输入如下所示的 shell 脚本时

CALL Employee_config ('ClientId','Data') we are getting CALL: command not found
EXECUTE Employee_config ('ClientId','Data') we are getting EXECUTE: command not found
Run Code Online (Sandbox Code Playgroud)

如果有人可以更新如何从 shell 脚本调用 MySQL 存储过程,那就太好了。

mysql shell stored-procedures

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

套接字编程,bind()错误

我为服务器实现编写的代码不起作用.程序无法bind()正确套接字地址并生成错误.

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<string.h>
#include<stdlib.h>
#include <netdb.h>

int main(int argc , char* argv[])
{
    int socket_descriptor;
    struct sockaddr_in server;
    char buffer[512];
    int rval;
    int socket_a;

    if(socket_descriptor = socket(AF_INET, SOCK_STREAM , 0) < 0)
    {
        perror("Error at creating the socket");
        exit(1);
    }

    server.sin_family  = AF_INET;
    server.sin_addr.s_addr = INADDR_ANY;
    server.sin_port = htons(5000);

    if(bind(socket_descriptor,(struct sockaddr * )&server,sizeof(server)) < 0)
    {
        perror("Error at binding");
        exit(1);
    }

}
Run Code Online (Sandbox Code Playgroud)

错误

绑定时出错:非套接字上的套接字操作.

c unix sockets

2
推荐指数
1
解决办法
468
查看次数

C系统调用open()

我有麻烦open()。它总是返回-1,我不知道代码出了什么问题。它一直在说:

r1: No such file or directory
Run Code Online (Sandbox Code Playgroud)

但是txt文件与C程序位于同一目录中。

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>

#define BUFFSIZE 256

char upper(char c);

int main(void){

    int fd1, read1, fd2, write2;
    char *buffer[BUFFSIZE];

    fd1 = open("minuscole.txt", O_RDONLY);
    if (fd1 < 0) { perror("r1"); exit(1); }
    read1 = read(fd1, buffer, BUFFSIZE);
    close(fd1);

    printf("%d", read1);
    if(fd2 = open("maiuscole.txt", O_WRONLY | O_CREAT | O_TRUNC, 0644) > 0){
        write2 = write(fd2, buffer, BUFFSIZE);
    }
    close(fd2);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我希望它创建一个名为:的文件,"maiuscole.txt" …

c linux system-calls

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

以最简单的形式使用 fork() 需要按 Enter 完成执行

我想运行一些简单的例子来了解fork()系统调用是如何工作的。

它的工作但需要在打印后按回车键退出程序child process

#include <stdio.h>
#include <unistd.h> 

int main()
{
    pid_t pid;
    pid = fork();

    if(pid == 0){
        printf("child process\n");
    }
    else{
        printf("parent process\n");
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译、运行和输出

ss@ss:~$ gcc dd.c -o dd
ss@ss:~$ ./dd
parent process
ss@ss:~$ child process
Run Code Online (Sandbox Code Playgroud)

在屏幕程序上打印子进程后,需要按回车键返回终端。

终端等待输入新命令

终端等待输入新命令,如果只是按回车返回,写 ss@ss:和确定。

或者我们可以输入任何其他终端命令并执行。

我想知道为什么会发生这种行为,如果打印后程序真的完成了child process为什么终端不显示ss@ss:~$

这是我的机器信息

gcc --version

gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
Run Code Online (Sandbox Code Playgroud)

uname -a

Linux ss 4.8.0-36-generic #36~16.04.1-Ubuntu SMP Sun Feb 5 09:39:41 UTC 2017 i686 i686 i686 GNU/Linux …
Run Code Online (Sandbox Code Playgroud)

c fork pid

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

我们可以在常规寄存器中存储浮点吗?

据我了解,浮点存储在XMM寄存器中,而不是诸如的通用寄存器中eax,因此我做了一个实验:

float a = 5;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,a被存储1084227584XMM寄存器中。这是程序集版本:

.text
        .global _start
.LCO:
        .long 1084227584
_start:
        mov .LCO, %eax
        movss .LCO, %xmm0
Run Code Online (Sandbox Code Playgroud)

执行上述组件和使用它的调试gdb显示,在值eax将是1084227584,然而,在值ymm05

这是我的问题:

1- XMM寄存器有什么特别之处?除了SIMD指令,它们是唯一存储浮点的寄存器类型吗?

为什么不能在常规寄存器中设置相同的位?

2- floatdouble值始终存储为浮点吗?

我们永远不能将它们存储为fixed pointC或汇编语言吗?

c floating-point assembly x86-64

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

在没有 printf 的情况下打印到终端?

我想编写一个 C 程序,将文件的内容打印到终端中。

但是,我们不允许使用该<stdio.h>库,因此printf无法使用诸如此类的功能。

将东西打印到终端的替代方法是什么?

我正在做一些搜索,但我找不到直接的答案,因为大多数人只是使用printf.

c unix linux system-calls output

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

gcc 无法将 *.C 源代码识别为有效的 c 程序

我不小心将.C[note to Uppercase C ] 扩展名分配给 UBUNTU 16.04 LTS 中的 C 源代码,并使用 Gedit 程序打开它以输入我的代码。

\n

gcc 编译器无法将其识别为 C 编程源代码,并在尝试编译时产生错误。

\n

UBUNTU 文件管理器将其显示为 cpp 文件。

\n

代码

\n
#include <stdlib.h>\n\nint main(){\n\n    int * c = malloc(sizeof(int));\n    free(c); \n  \n    return 0;   \n}\n
Run Code Online (Sandbox Code Playgroud)\n

gcc编译命令,输出:

\n
$gcc test.C -o test\ntest.C:8:18: error: invalid conversion from \xe2\x80\x98void*\xe2\x80\x99 to \xe2\x80\x98int*\xe2\x80\x99 [-fpermissive]\n  int * c = malloc( sizeof(int) );\n
Run Code Online (Sandbox Code Playgroud)\n

正如我们所知,这是一个 C++ 特定错误,我认为 gcc 的行为就像 C++ 文件一样,如\n 中所述。

\n

这是我的系统信息

\n
Linux …
Run Code Online (Sandbox Code Playgroud)

c gcc ubuntu-16.04

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

从结构中打印通过C中的值传递

TL; DR:

printf()printLotInfo()通过值时打印垃圾.

#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <math.h>
#include <string.h>

typedef struct Time
{
   int hour;                              //Hour of day
   int minute;                            //Minute of hour
} Time;

typedef struct Car
{
   char * plateNumber;                    //String to hold plate
   char hasPermit;                        //True/False
   Time * enteringTime;                   //Time Struct
   int lotParkedIn;                       //Where is the car located
} Car;

typedef struct ParkingLot
{
   int lotNumber;                         //Lot identifier
   double hourlyRate;                     //$$/h
   double maxCharge;                      //Maximum daily charge
   int capacity;                          //How many …
Run Code Online (Sandbox Code Playgroud)

c printing printf struct

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

C = C++; 为什么该值不会改变C变量,因为它保持为0

当我使用c=c++;指令时,为什么C的值不会改变.

#include <stdio.h>
int main()
{
int t, c=0,d;
scanf("%d",&t);
while(t--)
{
    int n;
    scanf("%d",&n);
    if(n>=50)
    {
        c=c++;
        printf("%d\n",c);
    }
}

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c assignment-operator post-increment

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