These segmentation faults are making me feel very humble about my C skills. I have a feeling I don't remember something here.

Code:
(gdb) run
Starting program: /home/eugene/cfiles/a.out 

Program received signal SIGSEGV, Segmentation fault.
0x08048495 in string2list (sPtr=0xbf8bbdf0, string=0xbf8be000 <Address 0xbf8be000 out of bounds>) at 12.9.c:62
62			insert( sPtr, *string );
Code:
#include <stdio.h>
#include <stdlib.h>

struct listnode {
	char data;
	struct listnode *nextPtr;
};


typedef struct listnode ListNode;


void insert( ListNode **sPtr, char input );
void display( ListNode *sPtr );
void string2list( ListNode **sPtr, char *string );

int main()
{
	ListNode *startPtr = NULL;
	char string[ 10 ] = "a test";


	string2list( &startPtr, string );
//	insert( &startPtr, 'q' );
//	insert( &startPtr, 'z' );
//	insert( &startPtr, 'a' );
	display( startPtr );


	return 0;
}





void string2list( ListNode **sPtr, char string[] )
{
	
	while ( string != '\0' ) {
		insert( sPtr, *string );
		++string;
	}

}




void display( ListNode *sPtr )
{
	ListNode *currentPtr = NULL;
	currentPtr = sPtr;

	while ( currentPtr != NULL ) {
		printf( "%c", currentPtr->data );
		currentPtr = currentPtr->nextPtr;
	}
	printf( "\n" );
}


void insert( ListNode **sPtr, char input )
{
	ListNode *newPtr = NULL, *previousPtr = NULL, *currentPtr = NULL;

	newPtr = malloc( sizeof( ListNode ) );


	if ( newPtr != NULL ) {
		newPtr->data = input;
		newPtr->nextPtr = NULL;

		currentPtr = *sPtr;

		while ( currentPtr != NULL ) {
			previousPtr = currentPtr;
			currentPtr = currentPtr->nextPtr;
		}

		if ( currentPtr == *sPtr ) {
			newPtr->nextPtr = *sPtr;
			*sPtr = newPtr;
		}
		else {
			previousPtr->nextPtr = newPtr;
			newPtr->nextPtr = currentPtr;
		}
	}

}