Tag: string

是否有一个很好的替代fgets?

我只是一名年轻的计算机科学专业的学生,​​目前我对从stdin读取字符串的最佳做法感到困惑。 我知道有很多方法可以做到这一点,有些方法比其他方法更安全,等等……我目前需要一个防止缓冲区溢出的函数,并在末尾添加一个空终止符(\ 0)的字符串。 我发现fgets对此非常有用,但是…它会停止用\ n或EOF读取! 如果我希望用户一次输入多行,该怎么办? 还有其他function可以帮助我做到这一点吗? 对不起,如果这个问题对你们中的某些人来说似乎很愚蠢,那么请理解我! 任何帮助,将不胜感激。

使用JNI将字符串从C发送到Java

我正在尝试使用JNI将字符串从C发送到Java。 这是我的C代码: static char* test_encrypt_ecb_verbose(char* plain_text_char, char* key_char, char** ciphertext) { uint8_t i, buf[64], buf2[64]; uint8_t key[16]; // 512bit text uint8_t plain_text[64]; char outstr[64]; memcpy(key,key_char,16) ; memcpy(plain_text, plain_text_char, 64); memset(buf, 0, 64); memset(buf2, 0, 64); // print text to encrypt, key and IV printf(“ECB encrypt verbose:\n\n”); printf(“plain text:\n”); for(i = (uint8_t) 0; i < (uint8_t) […]

如何使用scanf输入空格?

使用以下代码: char *name = malloc(sizeof(char) + 256); printf(“What is your name? “); scanf(“%s”, name); printf(“Hello %s. Nice to meet you.\n”, name); 用户可以输入他们的名字但是当他们输入一个像Lucas Aardvark这样的空间的名字时, scanf()切断Lucas之后的所有内容。 如何使scanf()允许空格

从C中具有多个NULL’\ 0’的函数返回字符串

我在压缩字符串。 并且压缩字符串有时在结束NULL之前具有NULL字符。 我想返回字符串直到结束null。但压缩器函数返回sting直到第一个NULL发生。 请帮我。 char* compressor(char* str) { char *compressed_string; //After some calculation compressed_string=”bk`NULL`dk”;// at the last here is automatic an NULL we all know return compressed_string; } void main() { char* str; str=compressor(“Muhammad Ashikuzzaman”); printf(“Compressed Value = %s”,str); } 输出为:压缩值= bk; 压缩器function的所有其他字符都不在这里。 有没有办法显示所有字符串。

使用fprintf和fscanf时出错

我有一个存档results.csv ,我需要读取此存档的第一行并在output.txt上打印出来。 不知怎的,它在所有东西之后打印随机字符,我无法弄清楚出了什么问题。 命令: ac results.csv 第一行: date,home_team,away_team,home_score,away_score,tournament,city,country,neutral output.txt: date,home_team,away_team,home_score,away_score,tournament,city,country,neutral,(!£,(!£,(!£,(!£,(!£,@,£,(!£,(!£ #include #include #include #include typedef struct { char *line1; char *line1a; char *line1b; char *team1; char *team2; char *reason; char *city; char *country; char *neutral_field; }data; void open_input(char *argv[], FILE **input) { if((*input=fopen(argv[1], “r”)) == NULL) { printf(“%s not found\n”, argv[1]); exit(1); } } void […]

C字符串长度 – 这是有效的代码吗?

这种类型的表达式在C中是否有效(在所有编译器上)? 如果是的话,这是好的C吗? char cloneString (char clone[], char string[], int Length) { if(!Length) Length=64 ; int i = 0 ; while((clone[i++] = string[i]) != ‘\0’, –Length) ; clone[i] = ‘\0’; printf(“cloneString = %s\n”, clone); }; 这会更好,更糟,无动于衷吗? char *cloneString (char clone[], char string[], int Length) { if(!Length) Length=STRING_LENGTH ; char *r = clone ; while ( //(clone[i++] […]

拆分以逗号分隔的整数字符串

我的背景不在C(它在Real Studio中 – 类似于VB)而且我真的很难分割逗号分隔的字符串,因为我不习惯低级字符串处理。 我正在通过串口向Arduino发送字符串。 这些字符串是特定格式的命令。 例如: @20,2000,5! @10,423,0! ‘@’是标题,表示新命令和’!’ 是标记命令结束的终止页脚。 ‘@’之后的第一个整数是命令id,其余的整数是数据(作为数据传递的整数数可以是0-10个整数)。 我写了一个获取命令的草图(剥离了’@’和’!’)并在有一个命令要处理时调用一个名为handleCommand()的函数。 问题是,我真的不知道如何拆分这个命令来处理它! 这是草图代码: String command; // a string to hold the incoming command boolean commandReceived = false; // whether the command has been received in full void setup() { // put your setup code here, to run once: Serial.begin(9600); } void loop() { […]

收到一个字符串

如何在uart中接收字符串。 我正在使用avr studio 5和brays终端这样的 和这张图片一样,我使用9600的波特率。我尝试输入”abcdef” ,它只出现”abcf” 。 我的代码是这样的—> #include void serial_init(void) { UBRRH = 0x00; UBRRL = 95; //baudrate 9600 and F_CPU 14745600UL UCSRB = (1 << RXEN) | (1 << TXEN) | (1<<RXCIE); UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0)|(1 << UCSZ1); } unsigned long long Usart_Receive(void) { while((UCSRA & (1 << RXC)) == 0) {}; return UDR; […]

在C中打印char数组会导致分段错误

我做了很多搜索,找不到同样问题的任何问题。 这是我的代码: void fun(char* name){ printf(“%s”,name); } char name[6]; sscanf(input,”RECTANGLE_SEARCH(%6[A-Za-z0-9])”,name) printf(“%s”,name); fun(name); 该名称是从scanf抓取的,它首先打印出来。 然后,当调用fun时,在尝试打印名称时会出现分段错误。 为什么是这样?

编辑一个char *数组

我有一个像这样的char *数组: char * gradient_xpm[] = {“abc”, “def”, “ghi”}; 我需要更改这些字符串的值。 我已经尝试过strcpy和=运算符,但它给了我一个分段错误。 例如: strcpy(gradient_xpm[1],”jkl”); gradient_xpm[1][2] = ‘x’; 我甚至无法编辑一个字符。 如何编辑这些值?