Tag: string

如果strcat函数中的目标字符串不是以null结尾,那么它是否是未定义的行为?

以下程序 // Code has taken from http://ideone.com/AXClWb #include #include #define SIZE1 5 #define SIZE2 10 #define SIZE3 15 int main(void){ char a[SIZE1] = “Hello”; char b[SIZE2] = ” World”; char res[SIZE3] = {0}; for (int i=0 ; i<SIZE1 ; i++){ res[i] = a[i]; } strcat(res, b); printf("The new string is: %s\n",res); return 0; } 有明确的行为。 […]

使用strtolvalidationANSI C中的整数输入

我是编程和C的新手,我目前正在大学学习。 这是一个任务,所以我想避免直接的答案,但更多的提示或提示/推动正确的方向。 我试图使用strtol来validation我的键盘输入,更具体地说,测试输入是否为数字。 我已经查看过这里和其他网站上的其他问题,我已经按照给其他用户的说明,但它没有帮助我。 从我读取/理解的strtol (long int strtol(const char * str,char ** endptr,int base);)如果endptr不是空指针,该函数将endptr的值设置为第一个字符之后的号码。 因此,如果我要输入84948ldfk,则endptr将指向’l’,告诉我输入中除了数字之外还有其他字符会使其无效。 然而在我的情况下,正在发生的事情是,无论我输入什么,我的程序返回一个无效的输入。 这是我的代码: void run_perf_square(int *option_stats) { char input[MAX_NUM_INPUT + EXTRA_SPACES]; /*MAX_NUM_INPUT + EXTRA_SPACES are defined *in header file. MAX_NUM_INPUT = 7 *and EXTRA_SPACES *(for ‘\n’ and ‘\0’) = 2. */ char *ptr; unsigned num=0; /*num is unsigned as it was […]

fgets最大尺寸读取

使用fgets输入字符串,我怀疑与字符串读取的长度有关。 例如,请考虑以下程序。 char str[50]; int i; int len; printf(“Enter name:\n”); fgets(str,11,stdin); len = strlen(str); printf(“len : %d\n”,len); 如果我输入123456789 , strlen给出10。 如果我输入1234567890 , strlen再次给出10? 我认为strlen也在考虑字符串长度换行。 我对么? (我理解fgets使用换行作为字符串的一部分) 有什么问题(2)我只输入10个字符,这里的字符串长度应该是11吗? 10 + 1(换行)= 11

使用C scanf_s输入字符串

我一直在努力寻找答案,但我找不到答案。 我想插入一个读取字符串的部分,如“Hello”字符串并存储并可以在需要时显示它,以便printf(“%s”, blah); 产生Hello 。 这是给我带来麻烦的代码部分 char name[64]; scanf_s(“%s”, name); printf(“Your name is %s”, name); 我知道printf不是问题; 在提示输入某些内容后程序崩溃。 请帮忙?

如何异或在C中加扰字符串并使用相同的函数再次返回?

我试图在程序中混淆一个字符串。 目前,我只有一个简单的字符串反转工作。 我希望能够对数据执行XOR加扰以使其更安全,但是我尝试过的方法不起作用。 相同的函数和输入类型用于解码字符串。 这对于字符串反转没有问题,因为它只是反转,但是这可以通过XORing轻松完成而不会过于复杂吗? 我希望如果进程只保留一个字符串,就像反转一样。 这是我的逆转function。 void reverse_string(unsigned char *buf, int length) { int i; unsigned char temp; for (i = 0; i < length / 2; i++) { temp = buf[i]; buf[i] = buf[length – i – 1]; buf[length – i – 1] = temp; } } 这是XORfunction的尝试 void charxor(char * text, int […]

为什么`strchr`似乎与多字节字符一起工作,尽管手册免责声明?

从: man strchr char * strchr(const char * s,int c); strchr()函数返回指向字符串s中第一次出现的字符c的指针。 这里“字符”表示“字节”; 这些函数不适用于宽字符或多字节字符。 不过,如果我尝试搜索像é (UTF-8中的0xC3A9 )这样的多字节字符: const char str[] = “This string contains é which is a multi-byte character”; char * pos = strchr(str, (int)’é’); printf(“%s\n”, pos); printf(“0x%X 0x%X\n”, pos[-1], pos[0]); 我得到以下输出: 这是一个多字节字符 0xFFFFFFC3 0xFFFFFFA9 尽管有警告: 警告:多字符字符常量[-Wmultichar] 所以这是我的问题: 什么意味着strchr不适用于多字节字符? (它似乎工作,只要int类型足够大,包含你的多字节,最多4个字节) 如何摆脱警告,即如何安全地恢复多字节值并将其存储在int中? 为什么前缀为0xFFFFFF ?

使用Win32 API连接字符串

使用Win32连接字符串的最佳方法是什么? 如果理解正确,正常的C方法将是使用strcat ,但由于Win32现在处理Unicode字符串(又名LPWSTR ),我想不出strcat如何使用它。 有这个function,还是我应该自己编写?

具有转义字符的Flex / Lex编码字符串

我将在某些背景下提到这个问题: flex / lex中字符串文字的正则表达式 我遇到的问题是在我的词法分析器中使用转义字符处理输入,我认为这可能与字符串的编码有关,但我不确定。 这是我在lexer中处理字符串文字的方式: \”(\\.|[^\\”])*\” { char* text1 = strndup(yytext + 1, strlen(yytext) – 2); char* text2 = “text\n”; printf(“value = \n”, text1, text1); printf(“value = \n”, text2, text2); } 这输出如下: value = value = 它似乎将换行符分别视为反斜杠后跟n。 这里发生了什么,如何处理文本与C输入相同?

C char *进入Objective-C NSString(或NSData?)

我正在解析C中的文件字节流,并通过回调将结果组织到Objective-C世界中的NSDictionary和NSArray中。 NSDictionary的键是NSString所有实例。 我正在使用NSNEXTSTEPStringEncoding将C字符串转换为NSString ,但现在又一些键是nil (即使C字符串有一个或多个字符)。 这样做的正确方法是什么?

使用free()时的分段错误

此代码导致分段错误: int main(){ char *p; char a[50] = “aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa”; p = (char *)malloc(50*sizeof(char)); if(!p){ cout << "Allocation Failure"; cout << "\n"; } else{ cout << "Allocation Success"; cout << "\n"; p = a; cout << p; cout << "\n"; free(p); } return 0; } 执行该程序后的输出是: Allocation Success aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Segmentation fault 我无法找到错误。 可能是什么原因?