我有这个字符串:
char *path = " one\\\two\\\five\\\six";
当每个单元格都是字符串时,我想将它分隔为数组。
我正在使用strtok
,购买我的问题是计算为阵列分配多少空间。
我这样做:
for ( i = 0 ; i < strlen(path) ; i++)
{
if (path[i] == '\' && path[i+1] == '\') /*doesn't work! :( */
counter++
}
比较器线不工作......我也试过写:“\”但它也不能正常工作。 有什么问题?
编辑 我正在尝试使用strtok并且它变得凌乱:(
char seps[] = "\\";
char *elemName = NULL;
elemName = strtok( path, seps );
while( elemName != NULL )
{
/* While there are tokens in "string" */
/*copy the elemName*/
stringArr[runner] = strdup(elemName);
/* Get next token: */
elemName = strtok( NULL, seps );
}
printf("printing the strings!!!!\n");
for ( i = 0 ; i < arr_size ; i++)
{
printf (" %s \n " , stringArr[i]);
}
答案 0 :(得分:1)
你需要写'\\'
(或数字92,因为它是\
ASCII值)。 \
是一个转义字符,如果你想将它包含在字符串中,你需要自己转义它。
解释:\(whatever)
在编译阶段被转换为一个char。 (例如,\n
- &gt; char值为ASCII值0x0A)
答案 1 :(得分:1)
请记住,字符串或字符文字中的\
字符是转义字符(如Yossarian的答案中所述),这意味着即使您有一个包含{的字符串文字{1}}编译器会将其转换为实际字符串中的单个\\
。
因此,如果您的代码中包含:
\
如果您打印出来(例如char *path = " one\\two\\five\\six"
),您会看到它:
one\two\five\six
这意味着你的逻辑是错误的,你不必检查两个反斜杠,这也意味着你不必担心超出字符串结尾的读数。
答案 2 :(得分:0)
你必须逃避斜杠:'\\'
代表反斜杠字符\
答案 3 :(得分:0)
这样声明的字符串:
char * path = "one\\two"
有7个(+ 1)个字符,'o''''''''''''''''''''''''''''''那是因为你必须逃避单一的反斜杠。所以使用这个:
if ( path[i] == '\\' ) {
counter++;
}
答案 4 :(得分:0)
使用'\'拆分“\”,因为使用单个“\”将无效,因为“\”是一个转义字符。
答案 5 :(得分:0)
对于您的分配问题: 您只应为NULL终止的字符串指针数组分配内存。
因此,遍历字符串,并计算分隔符。你需要分配2 +计数。还有一个字符串然后分隔符,另外还有一个终止NULL指针。
char **strv = malloc( (2 + count) * sizeof( char*) );
下一步是再次遍历字符串,并在刚刚分配的数组中设置指针。类似的东西:
strv[ i++ ] = string;
for ( pstr = string; *pstr != '\0'; pstr++ ){
if( *pstr == delimiter ) {
*pstr = '\0';
strv[ i++ ] = pstr + 1;
}
}
strv[ i ] = NULL;
(代码修改原始字符串。) 记得释放字符串和分配的指针数组。
我认为'\\'是一个转义字符,后跟反斜杠。 '\\'因此只是一个角色。确保代码的计数部分不计算两次。
-Øystein